@netgrif/components-core 6.0.2 → 6.0.4-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/bundles/netgrif-components-core.umd.js +105 -34
- package/bundles/netgrif-components-core.umd.js.map +1 -1
- package/bundles/netgrif-components-core.umd.min.js +1 -1
- package/bundles/netgrif-components-core.umd.min.js.map +1 -1
- package/esm2015/lib/authentication/components/abstract-authentication-overlay.js +2 -2
- package/esm2015/lib/configuration/configuration.service.js +7 -5
- package/esm2015/lib/data-fields/file-field/abstract-file-field.component.js +6 -3
- package/esm2015/lib/data-fields/file-list-field/abstract-file-list-field.component.js +6 -3
- package/esm2015/lib/data-fields/models/file-field-id-body.js +2 -0
- package/esm2015/lib/groups/services/next-group.service.js +2 -2
- package/esm2015/lib/process/process.service.js +3 -2
- package/esm2015/lib/resources/engine-endpoint/public/public-task-resource.service.js +1 -1
- package/esm2015/lib/search/models/category/case/case-dataset.js +3 -6
- package/esm2015/lib/search/models/category/case/case-simple-dataset.js +3 -3
- package/esm2015/lib/search/models/category/case/case-title.js +13 -3
- package/esm2015/lib/search/models/category/case/case-visual-id.js +13 -3
- package/esm2015/lib/search/models/category/category.js +10 -2
- package/esm2015/lib/search/models/operator/substring.js +3 -3
- package/esm2015/lib/search/search-keyword-resolver-service/search-index-resolver.service.js +18 -3
- package/esm2015/lib/search/search-service/search.service.js +3 -2
- package/esm5/lib/authentication/components/abstract-authentication-overlay.js +2 -2
- package/esm5/lib/configuration/configuration.service.js +23 -10
- package/esm5/lib/data-fields/file-field/abstract-file-field.component.js +6 -3
- package/esm5/lib/data-fields/file-list-field/abstract-file-list-field.component.js +6 -3
- package/esm5/lib/data-fields/models/file-field-id-body.js +2 -0
- package/esm5/lib/groups/services/next-group.service.js +2 -2
- package/esm5/lib/process/process.service.js +3 -2
- package/esm5/lib/resources/engine-endpoint/public/public-task-resource.service.js +1 -1
- package/esm5/lib/search/models/category/case/case-dataset.js +3 -6
- package/esm5/lib/search/models/category/case/case-simple-dataset.js +3 -3
- package/esm5/lib/search/models/category/case/case-title.js +19 -4
- package/esm5/lib/search/models/category/case/case-visual-id.js +19 -4
- package/esm5/lib/search/models/category/category.js +10 -2
- package/esm5/lib/search/models/operator/substring.js +3 -3
- package/esm5/lib/search/search-keyword-resolver-service/search-index-resolver.service.js +17 -2
- package/esm5/lib/search/search-service/search.service.js +3 -2
- package/fesm2015/netgrif-components-core.js +78 -28
- package/fesm2015/netgrif-components-core.js.map +1 -1
- package/fesm5/netgrif-components-core.js +106 -35
- package/fesm5/netgrif-components-core.js.map +1 -1
- package/lib/configuration/configuration.service.d.ts +1 -0
- package/lib/data-fields/models/file-field-id-body.d.ts +3 -0
- package/lib/process/process.service.d.ts +1 -0
- package/lib/search/models/category/case/case-dataset.d.ts +0 -2
- package/lib/search/models/category/case/case-title.d.ts +4 -1
- package/lib/search/models/category/case/case-visual-id.d.ts +4 -1
- package/lib/search/models/category/category.d.ts +7 -0
- package/lib/search/search-keyword-resolver-service/search-index-resolver.service.d.ts +12 -0
- package/netgrif-components-core.metadata.json +1 -1
- package/package.json +1 -1
|
@@ -58,14 +58,14 @@ export class CaseSimpleDataset extends NoConfigurationCategory {
|
|
|
58
58
|
break;
|
|
59
59
|
case 'file':
|
|
60
60
|
case 'fileList':
|
|
61
|
-
this._elasticKeyword = resolver.getIndex(this._fieldId, SearchIndex.FILE_NAME);
|
|
61
|
+
this._elasticKeyword = resolver.getIndex(this._fieldId, SearchIndex.FILE_NAME, this.isSelectedOperator(Substring));
|
|
62
62
|
break;
|
|
63
63
|
case 'user':
|
|
64
64
|
case 'userList':
|
|
65
65
|
this._elasticKeyword = resolver.getIndex(this._fieldId, SearchIndex.USER_ID);
|
|
66
66
|
break;
|
|
67
67
|
default:
|
|
68
|
-
this._elasticKeyword = resolver.getIndex(this._fieldId, SearchIndex.FULLTEXT);
|
|
68
|
+
this._elasticKeyword = resolver.getIndex(this._fieldId, SearchIndex.FULLTEXT, this.isSelectedOperator(Substring));
|
|
69
69
|
}
|
|
70
70
|
}
|
|
71
71
|
get elasticKeywords() {
|
|
@@ -132,4 +132,4 @@ export class CaseSimpleDataset extends NoConfigurationCategory {
|
|
|
132
132
|
}
|
|
133
133
|
}
|
|
134
134
|
CaseSimpleDataset._i18n = 'search.category.case.dataset';
|
|
135
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FzZS1zaW1wbGUtZGF0YXNldC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BuZXRncmlmL2NvbXBvbmVudHMtY29yZS8iLCJzb3VyY2VzIjpbImxpYi9zZWFyY2gvbW9kZWxzL2NhdGVnb3J5L2Nhc2UvY2FzZS1zaW1wbGUtZGF0YXNldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFFeEMsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQzdDLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUN0RCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFDL0QsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ25ELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDckUsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUN4RCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDL0MsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUl6Qzs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLE9BQU8saUJBQWtCLFNBQVEsdUJBQStCO0lBV2xFLFlBQVksU0FBMEIsRUFDMUIsTUFBcUIsRUFDWCxxQkFBMkM7UUFDN0QsS0FBSyxDQUFDLFNBQVMsRUFDWCxTQUFTLEVBQ1QsR0FBRyxpQkFBaUIsQ0FBQyxLQUFLLE9BQU8sRUFDakMsU0FBUyxFQUNULE1BQU0sRUFDTixTQUFTLENBQUMsQ0FBQztRQU5H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QUMsRUFBRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUNyRixlQUFlLENBQUMsRUFBRSxDQUNyQixDQUFDO1FBQ0YsT0FBTyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxFQUFFLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM5RSxDQUFDO0lBRUQsY0FBYztRQUNWLE9BQU8sVUFBVSxDQUFDLG1CQUFtQixDQUFDO0lBQzFDLENBQUM7SUFFRDs7T0FFRztJQUNILGNBQWM7UUFDVixNQUFNLElBQUksS0FBSyxDQUFDLG1EQUFtRCxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUVEOztPQUVHO0lBQ0gsZ0JBQWdCLENBQUMsUUFBbUM7UUFDaEQsTUFBTSxJQUFJLEtBQUssQ0FBQyxxREFBcUQsQ0FBQyxDQUFDO0lBQzNFLENBQUM7O0FBMUl1Qix1QkFBSyxHQUFHLDhCQUE4QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtPcGVyYXRvclNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL29wZXJhdG9yLXNlcnZpY2Uvb3BlcmF0b3Iuc2VydmljZSc7XG5pbXBvcnQge0xvZ2dlclNlcnZpY2V9IGZyb20gJy4uLy4uLy4uLy4uL2xvZ2dlci9zZXJ2aWNlcy9sb2dnZXIuc2VydmljZSc7XG5pbXBvcnQge1F1ZXJ5fSBmcm9tICcuLi8uLi9xdWVyeS9xdWVyeSc7XG5pbXBvcnQge09wZXJhdG9yfSBmcm9tICcuLi8uLi9vcGVyYXRvci9vcGVyYXRvcic7XG5pbXBvcnQge0VxdWFsc30gZnJvbSAnLi4vLi4vb3BlcmF0b3IvZXF1YWxzJztcbmltcG9ydCB7RXF1YWxzRGF0ZX0gZnJvbSAnLi4vLi4vb3BlcmF0b3IvZXF1YWxzLWRhdGUnO1xuaW1wb3J0IHtFcXVhbHNEYXRlVGltZX0gZnJvbSAnLi4vLi4vb3BlcmF0b3IvZXF1YWxzLWRhdGUtdGltZSc7XG5pbXBvcnQge1N1YnN0cmluZ30gZnJvbSAnLi4vLi4vb3BlcmF0b3Ivc3Vic3RyaW5nJztcbmltcG9ydCB7Q2FzZVByb2Nlc3N9IGZyb20gJy4vY2FzZS1wcm9jZXNzJztcbmltcG9ydCB7T3B0aW9uYWxEZXBlbmRlbmNpZXN9IGZyb20gJy4uLy4uLy4uL2NhdGVnb3J5LWZhY3Rvcnkvb3B0aW9uYWwtZGVwZW5kZW5jaWVzJztcbmltcG9ydCB7Qm9vbGVhbk9wZXJhdG9yfSBmcm9tICcuLi8uLi9ib29sZWFuLW9wZXJhdG9yJztcbmltcG9ydCB7Tm9Db25maWd1cmF0aW9uQ2F0ZWdvcnl9IGZyb20gJy4uL25vLWNvbmZpZ3VyYXRpb24tY2F0ZWdvcnknO1xuaW1wb3J0IHtDYXNlRGF0YXNldH0gZnJvbSAnLi9jYXNlLWRhdGFzZXQnO1xuaW1wb3J0IHtEYXRhZmllbGRNYXBLZXl9IGZyb20gJy4uLy4uL2RhdGFmaWVsZC1tYXAta2V5JztcbmltcG9ydCB7U2VhcmNoSW5kZXh9IGZyb20gJy4uLy4uL3NlYXJjaC1pbmRleCc7XG5pbXBvcnQge0NhdGVnb3JpZXN9IGZyb20gJy4uL2NhdGVnb3JpZXMnO1xuaW1wb3J0IHtDYXRlZ29yeUdlbmVyYXRvck1ldGFkYXRhfSBmcm9tICcuLi8uLi9wZXJzaXN0YW5jZS9nZW5lcmF0b3ItbWV0YWRhdGEnO1xuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcblxuLyoqXG4gKiBUaGlzIGNsYXNzIGFpbXMgdG8gYmUgYSBzaW1wbGVyIG1vcmUgbGltaXRlZCB2ZXJzaW9uIG9mIHRoZSB7QGxpbmsgQ2FzZURhdGFzZXR9IHtAbGluayBDYXRlZ29yeX0gaW1wbGVtZW50YXRpb24uXG4gKlxuICogSXQgY2FuIG9ubHkgZ2VuZXJhdGUgXCJlcXVhbGl0eVwiIHF1ZXJpZXMgZm9yIGEgc2luZ2xlIGZpZWxkLiBUaGUgY2F0ZWdvcnkgbXVzdCBiZSBjb25maWd1cmVkIGJlZm9yZSBpdCBjYW4gYmUgdXNlZCB0byBnZW5lcmF0ZSBxdWVyaWVzLlxuICpcbiAqIFRoaXMgY2F0ZWdvcnkgY2Fubm90IGJlIHNlcmlhbGl6ZWQuIElmIHlvdSB3YW50IHRvIHByZXNlcnZlIHRoaXMgY2F0ZWdvcnkncyBzdGF0ZSBjb252ZXJ0IGl0IHRvIHtAbGluayBDYXNlRGF0YXNldH1cbiAqIHdpdGggdGhlIFt0cmFuc2Zvcm1Ub0Nhc2VEYXRhc2V0KClde0BsaW5rIENhc2VTaW1wbGVEYXRhc2V0I3RyYW5zZm9ybVRvQ2FzZURhdGFzZXR9IG1ldGhvZCBhbmQgc2VyaWFsaXplIHRoZSByZXN1bHQuXG4gKlxuICogU2VlIFtjb25maWd1cmVde0BsaW5rIENhc2VTaW1wbGVEYXRhc2V0I2NvbmZpZ3VyZX0gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBDYXNlU2ltcGxlRGF0YXNldCBleHRlbmRzIE5vQ29uZmlndXJhdGlvbkNhdGVnb3J5PHN0cmluZz4ge1xuXG4gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2kxOG4gPSAnc2VhcmNoLmNhdGVnb3J5LmNhc2UuZGF0YXNldCc7XG5cbiAgICBwcm90ZWN0ZWQgX2ZpZWxkSWQ6IHN0cmluZztcbiAgICBwcm90ZWN0ZWQgX2ZpZWxkVHlwZTogc3RyaW5nO1xuICAgIHByb3RlY3RlZCBfbmV0SWRlbnRpZmllcnM6IEFycmF5PHN0cmluZz47XG4gICAgcHJvdGVjdGVkIF9lbGFzdGljS2V5d29yZDogc3RyaW5nO1xuXG4gICAgcHJvdGVjdGVkIF9wcm9jZXNzQ2F0ZWdvcnk6IENhc2VQcm9jZXNzO1xuXG4gICAgY29uc3RydWN0b3Iob3BlcmF0b3JzOiBPcGVyYXRvclNlcnZpY2UsXG4gICAgICAgICAgICAgICAgbG9nZ2VyOiBMb2dnZXJTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfb3B0aW9uYWxEZXBlbmRlbmNpZXM6IE9wdGlvbmFsRGVwZW5kZW5jaWVzKSB7XG4gICAgICAgIHN1cGVyKHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGAke0Nhc2VTaW1wbGVEYXRhc2V0Ll9pMThufS5uYW1lYCxcbiAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGxvZ2dlcixcbiAgICAgICAgICAgIG9wZXJhdG9ycyk7XG5cbiAgICAgICAgdGhpcy5fcHJvY2Vzc0NhdGVnb3J5ID0gX29wdGlvbmFsRGVwZW5kZW5jaWVzLmNhdGVnb3J5RmFjdG9yeS5nZXRXaXRoRGVmYXVsdE9wZXJhdG9yKENhc2VQcm9jZXNzKSBhcyBDYXNlUHJvY2VzcztcbiAgICB9XG5cbiAgICBkZXN0cm95KCkge1xuICAgICAgICBzdXBlci5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMuX3Byb2Nlc3NDYXRlZ29yeS5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgZ2V0IGlucHV0UGxhY2Vob2xkZXIoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb25maWd1cmUoZmllbGRJZDogc3RyaW5nLCBmaWVsZFR5cGU6IHN0cmluZywgbmV0SWRlbnRpZmllcnM6IEFycmF5PHN0cmluZz4pOiB2b2lkIHtcbiAgICAgICAgaWYgKCFmaWVsZElkIHx8ICFmaWVsZFR5cGUgfHwgIW5ldElkZW50aWZpZXJzIHx8IG5ldElkZW50aWZpZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5fbG9nLmVycm9yKCdDYXNlU2ltcGxlRGF0YXNldCBtdXN0IGJlIGNvbmZpZ3VyZWQgd2l0aCBkZWZpbmVkIHZhbHVlcyBhbmQgYSBub24tZW1wdHkgYXJyYXknKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9maWVsZElkID0gZmllbGRJZDtcbiAgICAgICAgdGhpcy5fZmllbGRUeXBlID0gZmllbGRUeXBlO1xuICAgICAgICB0aGlzLl9uZXRJZGVudGlmaWVycyA9IG5ldElkZW50aWZpZXJzO1xuICAgICAgICB0aGlzLnJlc29sdmVFbGFzdGljS2V5d29yZCgpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCByZXNvbHZlRWxhc3RpY0tleXdvcmQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJlc29sdmVyID0gdGhpcy5fb3B0aW9uYWxEZXBlbmRlbmNpZXMuc2VhcmNoSW5kZXhSZXNvbHZlcjtcbiAgICAgICAgc3dpdGNoICh0aGlzLl9maWVsZFR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICAgICAgICAgICAgdGhpcy5fZWxhc3RpY0tleXdvcmQgPSByZXNvbHZlci5nZXRJbmRleCh0aGlzLl9maWVsZElkLCBTZWFyY2hJbmRleC5OVU1CRVIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICAgICAgICBjYXNlICdkYXRlVGltZSc6XG4gICAgICAgICAgICAgICAgdGhpcy5fZWxhc3RpY0tleXdvcmQgPSByZXNvbHZlci5nZXRJbmRleCh0aGlzLl9maWVsZElkLCBTZWFyY2hJbmRleC5USU1FU1RBTVApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgICAgICAgICAgdGhpcy5fZWxhc3RpY0tleXdvcmQgPSByZXNvbHZlci5nZXRJbmRleCh0aGlzLl9maWVsZElkLCBTZWFyY2hJbmRleC5CT09MRUFOKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2ZpbGUnOlxuICAgICAgICAgICAgY2FzZSAnZmlsZUxpc3QnOlxuICAgICAgICAgICAgICAgIHRoaXMuX2VsYXN0aWNLZXl3b3JkID0gcmVzb2x2ZXIuZ2V0SW5kZXgodGhpcy5fZmllbGRJZCwgU2VhcmNoSW5kZXguRklMRV9OQU1FKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3VzZXInOlxuICAgICAgICAgICAgY2FzZSAndXNlckxpc3QnOlxuICAgICAgICAgICAgICAgIHRoaXMuX2VsYXN0aWNLZXl3b3JkID0gcmVzb2x2ZXIuZ2V0SW5kZXgodGhpcy5fZmllbGRJZCwgU2VhcmNoSW5kZXguVVNFUl9JRCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRoaXMuX2VsYXN0aWNLZXl3b3JkID0gcmVzb2x2ZXIuZ2V0SW5kZXgodGhpcy5fZmllbGRJZCwgU2VhcmNoSW5kZXguRlVMTFRFWFQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldCBlbGFzdGljS2V5d29yZHMoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgICAgIGlmICghdGhpcy5fZmllbGRJZCkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFt0aGlzLl9lbGFzdGljS2V5d29yZF07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHNlbGVjdGVkT3BlcmF0b3IoKTogT3BlcmF0b3I8YW55PiB7XG4gICAgICAgIHN3aXRjaCAodGhpcy5fZmllbGRUeXBlKSB7XG4gICAgICAgICAgICBjYXNlICdudW1iZXInOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9vcGVyYXRvclNlcnZpY2UuZ2V0T3BlcmF0b3IoRXF1YWxzKTtcbiAgICAgICAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9vcGVyYXRvclNlcnZpY2UuZ2V0T3BlcmF0b3IoRXF1YWxzKTtcbiAgICAgICAgICAgIGNhc2UgJ3VzZXInOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9vcGVyYXRvclNlcnZpY2UuZ2V0T3BlcmF0b3IoRXF1YWxzKTtcbiAgICAgICAgICAgIGNhc2UgJ2RhdGUnOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9vcGVyYXRvclNlcnZpY2UuZ2V0T3BlcmF0b3IoRXF1YWxzRGF0ZSk7XG4gICAgICAgICAgICBjYXNlICdkYXRlVGltZSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29wZXJhdG9yU2VydmljZS5nZXRPcGVyYXRvcihFcXVhbHNEYXRlVGltZSk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9vcGVyYXRvclNlcnZpY2UuZ2V0T3BlcmF0b3IoU3Vic3RyaW5nKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGR1cGxpY2F0ZSgpOiBDYXNlU2ltcGxlRGF0YXNldCB7XG4gICAgICAgIHJldHVybiBuZXcgQ2FzZVNpbXBsZURhdGFzZXQodGhpcy5fb3BlcmF0b3JTZXJ2aWNlLCB0aGlzLl9sb2csIHRoaXMuX29wdGlvbmFsRGVwZW5kZW5jaWVzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEge0BsaW5rIENhc2VEYXRhc2V0fSBpbnN0YW5jZSBhbmQgY29uZmlndXJlcyBpdCBzbywgdGhhdCB0aGUgcXVlcnkgaXQgZ2VuZXJhdGVzIHRhcmdldHNcbiAgICAgKiB0aGUgc2VsZWN0ZWQgZmllbGQsIHVzZXMgdGhlIGRlZmF1bHQgb3BlcmF0b3IgYW5kIGl0cyBvcGVyYW5kcyBhcmUgd2hhdCB0aGUgdXNlciBwcm92aWRlZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBmaWVsZFR5cGUgdGhlIHR5cGUgb2YgdGhlIGZpZWxkIHRoYXQgc2hvdWxkIGJlIHRhcmdldGVkIGJ5IHRoZSB0cmFuc2Zvcm1lZCBDYXRlZ29yeVxuICAgICAqIEBwYXJhbSBmaWVsZFRpdGxlIHRoZSB0aXRsZSBvZiB0aGUgZmllbGQgdGhhdCBzaG91bGQgYmUgdGFyZ2V0ZWQgYnkgdGhlIHRyYW5zZm9ybWVkIENhdGVnb3J5XG4gICAgICogQHBhcmFtIHVzZXJJbnB1dCB0aGUgb3BlcmFuZHMgZm9yIHRoZSBxdWVyaWVkIGZpZWxkXG4gICAgICogQHJldHVybnMgYSBuZXcge0BsaW5rIENhc2VEYXRhc2V0fSBjb25maWd1cmVkIHdpdGggdGhlIHByb3ZpZGVkIHZhbHVlc1xuICAgICAqL1xuICAgIHB1YmxpYyB0cmFuc2Zvcm1Ub0Nhc2VEYXRhc2V0KGZpZWxkVHlwZTogc3RyaW5nLCBmaWVsZFRpdGxlOiBzdHJpbmcsIHVzZXJJbnB1dDogQXJyYXk8YW55Pik6IENhc2VEYXRhc2V0IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5fb3B0aW9uYWxEZXBlbmRlbmNpZXMuY2F0ZWdvcnlGYWN0b3J5LmdldChDYXNlRGF0YXNldCkgYXMgQ2FzZURhdGFzZXQ7XG4gICAgICAgIHJlc3VsdC5zZWxlY3REYXRhZmllbGRzKERhdGFmaWVsZE1hcEtleS5zZXJpYWxpemVkRm9ybShmaWVsZFR5cGUsIGZpZWxkVGl0bGUpKTtcbiAgICAgICAgcmVzdWx0LnNldE9wZXJhbmRzKHVzZXJJbnB1dCk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdlbmVyYXRlUXVlcnkodXNlcklucHV0OiBBcnJheTx1bmtub3duPik6IFF1ZXJ5IHtcbiAgICAgICAgY29uc3QgdmFsdWVRdWVyeSA9IHRoaXMuc2VsZWN0ZWRPcGVyYXRvci5jcmVhdGVRdWVyeSh0aGlzLmVsYXN0aWNLZXl3b3JkcywgdXNlcklucHV0KTtcbiAgICAgICAgY29uc3QgbmV0c1F1ZXJ5ID0gUXVlcnkuY29tYmluZVF1ZXJpZXMoXG4gICAgICAgICAgICB0aGlzLl9uZXRJZGVudGlmaWVycy5tYXAoaWQgPT4gdGhpcy5fcHJvY2Vzc0NhdGVnb3J5LmdlbmVyYXRlUHJlZGljYXRlKFtbaWRdXSkucXVlcnkpLFxuICAgICAgICAgICAgQm9vbGVhbk9wZXJhdG9yLk9SXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBRdWVyeS5jb21iaW5lUXVlcmllcyhbdmFsdWVRdWVyeSwgbmV0c1F1ZXJ5XSwgQm9vbGVhbk9wZXJhdG9yLkFORCk7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplQ2xhc3MoKTogQ2F0ZWdvcmllcyB8IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBDYXRlZ29yaWVzLkNBU0VfU0lNUExFX0RBVEFTRVQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VyaWFsaXphdGlvbiBpcyBub3Qgc3VwcG9ydGVkLiBUaHJvd3MgYW4gZXJyb3IuXG4gICAgICovXG4gICAgY3JlYXRlTWV0YWRhdGEoKTogbmV2ZXIge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhc2VTaW1wbGVEYXRhc2V0IGRvZXMgbm90IHN1cHBvcnQgc2VyaWFsaXphdGlvbiEnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZXNlcmlhbGl6YXRpb24gaXMgbm90IHN1cHBvcnRlZC4gVGhyb3dzIGFuIGVycm9yLlxuICAgICAqL1xuICAgIGxvYWRGcm9tTWV0YWRhdGEobWV0YWRhdGE6IENhdGVnb3J5R2VuZXJhdG9yTWV0YWRhdGEpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYXNlU2ltcGxlRGF0YXNldCBkb2VzIG5vdCBzdXBwb3J0IGRlc2VyaWFsaXphdGlvbiEnKTtcbiAgICB9XG59XG4iXX0=
|
|
135
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FzZS1zaW1wbGUtZGF0YXNldC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BuZXRncmlmL2NvbXBvbmVudHMtY29yZS8iLCJzb3VyY2VzIjpbImxpYi9zZWFyY2gvbW9kZWxzL2NhdGVnb3J5L2Nhc2UvY2FzZS1zaW1wbGUtZGF0YXNldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFFeEMsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQzdDLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUN0RCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFDL0QsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ25ELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDckUsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUN4RCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDL0MsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUl6Qzs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLE9BQU8saUJBQWtCLFNBQVEsdUJBQStCO0lBV2xFLFlBQVksU0FBMEIsRUFDMUIsTUFBcUIsRUFDWCxxQkFBMkM7UUFDN0QsS0FBSyxDQUFDLFNBQVMsRUFDWCxTQUFTLEVBQ1QsR0FBRyxpQkFBaUIsQ0FBQyxLQUFLLE9BQU8sRUFDakMsU0FBUyxFQUNULE1BQU0sRUFDTixTQUFTLENBQUMsQ0FBQztRQU5H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LE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxjQUFjLENBQ2xDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQ3JGLGVBQWUsQ0FBQyxFQUFFLENBQ3JCLENBQUM7UUFDRixPQUFPLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDLEVBQUUsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzlFLENBQUM7SUFFRCxjQUFjO1FBQ1YsT0FBTyxVQUFVLENBQUMsbUJBQW1CLENBQUM7SUFDMUMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsY0FBYztRQUNWLE1BQU0sSUFBSSxLQUFLLENBQUMsbURBQW1ELENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBRUQ7O09BRUc7SUFDSCxnQkFBZ0IsQ0FBQyxRQUFtQztRQUNoRCxNQUFNLElBQUksS0FBSyxDQUFDLHFEQUFxRCxDQUFDLENBQUM7SUFDM0UsQ0FBQzs7QUExSXVCLHVCQUFLLEdBQUcsOEJBQThCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge09wZXJhdG9yU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vb3BlcmF0b3Itc2VydmljZS9vcGVyYXRvci5zZXJ2aWNlJztcbmltcG9ydCB7TG9nZ2VyU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vLi4vbG9nZ2VyL3NlcnZpY2VzL2xvZ2dlci5zZXJ2aWNlJztcbmltcG9ydCB7UXVlcnl9IGZyb20gJy4uLy4uL3F1ZXJ5L3F1ZXJ5JztcbmltcG9ydCB7T3BlcmF0b3J9IGZyb20gJy4uLy4uL29wZXJhdG9yL29wZXJhdG9yJztcbmltcG9ydCB7RXF1YWxzfSBmcm9tICcuLi8uLi9vcGVyYXRvci9lcXVhbHMnO1xuaW1wb3J0IHtFcXVhbHNEYXRlfSBmcm9tICcuLi8uLi9vcGVyYXRvci9lcXVhbHMtZGF0ZSc7XG5pbXBvcnQge0VxdWFsc0RhdGVUaW1lfSBmcm9tICcuLi8uLi9vcGVyYXRvci9lcXVhbHMtZGF0ZS10aW1lJztcbmltcG9ydCB7U3Vic3RyaW5nfSBmcm9tICcuLi8uLi9vcGVyYXRvci9zdWJzdHJpbmcnO1xuaW1wb3J0IHtDYXNlUHJvY2Vzc30gZnJvbSAnLi9jYXNlLXByb2Nlc3MnO1xuaW1wb3J0IHtPcHRpb25hbERlcGVuZGVuY2llc30gZnJvbSAnLi4vLi4vLi4vY2F0ZWdvcnktZmFjdG9yeS9vcHRpb25hbC1kZXBlbmRlbmNpZXMnO1xuaW1wb3J0IHtCb29sZWFuT3BlcmF0b3J9IGZyb20gJy4uLy4uL2Jvb2xlYW4tb3BlcmF0b3InO1xuaW1wb3J0IHtOb0NvbmZpZ3VyYXRpb25DYXRlZ29yeX0gZnJvbSAnLi4vbm8tY29uZmlndXJhdGlvbi1jYXRlZ29yeSc7XG5pbXBvcnQge0Nhc2VEYXRhc2V0fSBmcm9tICcuL2Nhc2UtZGF0YXNldCc7XG5pbXBvcnQge0RhdGFmaWVsZE1hcEtleX0gZnJvbSAnLi4vLi4vZGF0YWZpZWxkLW1hcC1rZXknO1xuaW1wb3J0IHtTZWFyY2hJbmRleH0gZnJvbSAnLi4vLi4vc2VhcmNoLWluZGV4JztcbmltcG9ydCB7Q2F0ZWdvcmllc30gZnJvbSAnLi4vY2F0ZWdvcmllcyc7XG5pbXBvcnQge0NhdGVnb3J5R2VuZXJhdG9yTWV0YWRhdGF9IGZyb20gJy4uLy4uL3BlcnNpc3RhbmNlL2dlbmVyYXRvci1tZXRhZGF0YSc7XG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuXG4vKipcbiAqIFRoaXMgY2xhc3MgYWltcyB0byBiZSBhIHNpbXBsZXIgbW9yZSBsaW1pdGVkIHZlcnNpb24gb2YgdGhlIHtAbGluayBDYXNlRGF0YXNldH0ge0BsaW5rIENhdGVnb3J5fSBpbXBsZW1lbnRhdGlvbi5cbiAqXG4gKiBJdCBjYW4gb25seSBnZW5lcmF0ZSBcImVxdWFsaXR5XCIgcXVlcmllcyBmb3IgYSBzaW5nbGUgZmllbGQuIFRoZSBjYXRlZ29yeSBtdXN0IGJlIGNvbmZpZ3VyZWQgYmVmb3JlIGl0IGNhbiBiZSB1c2VkIHRvIGdlbmVyYXRlIHF1ZXJpZXMuXG4gKlxuICogVGhpcyBjYXRlZ29yeSBjYW5ub3QgYmUgc2VyaWFsaXplZC4gSWYgeW91IHdhbnQgdG8gcHJlc2VydmUgdGhpcyBjYXRlZ29yeSdzIHN0YXRlIGNvbnZlcnQgaXQgdG8ge0BsaW5rIENhc2VEYXRhc2V0fVxuICogd2l0aCB0aGUgW3RyYW5zZm9ybVRvQ2FzZURhdGFzZXQoKV17QGxpbmsgQ2FzZVNpbXBsZURhdGFzZXQjdHJhbnNmb3JtVG9DYXNlRGF0YXNldH0gbWV0aG9kIGFuZCBzZXJpYWxpemUgdGhlIHJlc3VsdC5cbiAqXG4gKiBTZWUgW2NvbmZpZ3VyZV17QGxpbmsgQ2FzZVNpbXBsZURhdGFzZXQjY29uZmlndXJlfSBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIENhc2VTaW1wbGVEYXRhc2V0IGV4dGVuZHMgTm9Db25maWd1cmF0aW9uQ2F0ZWdvcnk8c3RyaW5nPiB7XG5cbiAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaTE4biA9ICdzZWFyY2guY2F0ZWdvcnkuY2FzZS5kYXRhc2V0JztcblxuICAgIHByb3RlY3RlZCBfZmllbGRJZDogc3RyaW5nO1xuICAgIHByb3RlY3RlZCBfZmllbGRUeXBlOiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIF9uZXRJZGVudGlmaWVyczogQXJyYXk8c3RyaW5nPjtcbiAgICBwcm90ZWN0ZWQgX2VsYXN0aWNLZXl3b3JkOiBzdHJpbmc7XG5cbiAgICBwcm90ZWN0ZWQgX3Byb2Nlc3NDYXRlZ29yeTogQ2FzZVByb2Nlc3M7XG5cbiAgICBjb25zdHJ1Y3RvcihvcGVyYXRvcnM6IE9wZXJhdG9yU2VydmljZSxcbiAgICAgICAgICAgICAgICBsb2dnZXI6IExvZ2dlclNlcnZpY2UsXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9vcHRpb25hbERlcGVuZGVuY2llczogT3B0aW9uYWxEZXBlbmRlbmNpZXMpIHtcbiAgICAgICAgc3VwZXIodW5kZWZpbmVkLFxuICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgYCR7Q2FzZVNpbXBsZURhdGFzZXQuX2kxOG59Lm5hbWVgLFxuICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgbG9nZ2VyLFxuICAgICAgICAgICAgb3BlcmF0b3JzKTtcblxuICAgICAgICB0aGlzLl9wcm9jZXNzQ2F0ZWdvcnkgPSBfb3B0aW9uYWxEZXBlbmRlbmNpZXMuY2F0ZWdvcnlGYWN0b3J5LmdldFdpdGhEZWZhdWx0T3BlcmF0b3IoQ2FzZVByb2Nlc3MpIGFzIENhc2VQcm9jZXNzO1xuICAgIH1cblxuICAgIGRlc3Ryb3koKSB7XG4gICAgICAgIHN1cGVyLmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5fcHJvY2Vzc0NhdGVnb3J5LmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICBnZXQgaW5wdXRQbGFjZWhvbGRlcigpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgcHVibGljIGNvbmZpZ3VyZShmaWVsZElkOiBzdHJpbmcsIGZpZWxkVHlwZTogc3RyaW5nLCBuZXRJZGVudGlmaWVyczogQXJyYXk8c3RyaW5nPik6IHZvaWQge1xuICAgICAgICBpZiAoIWZpZWxkSWQgfHwgIWZpZWxkVHlwZSB8fCAhbmV0SWRlbnRpZmllcnMgfHwgbmV0SWRlbnRpZmllcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLl9sb2cuZXJyb3IoJ0Nhc2VTaW1wbGVEYXRhc2V0IG11c3QgYmUgY29uZmlndXJlZCB3aXRoIGRlZmluZWQgdmFsdWVzIGFuZCBhIG5vbi1lbXB0eSBhcnJheScpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2ZpZWxkSWQgPSBmaWVsZElkO1xuICAgICAgICB0aGlzLl9maWVsZFR5cGUgPSBmaWVsZFR5cGU7XG4gICAgICAgIHRoaXMuX25ldElkZW50aWZpZXJzID0gbmV0SWRlbnRpZmllcnM7XG4gICAgICAgIHRoaXMucmVzb2x2ZUVsYXN0aWNLZXl3b3JkKCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHJlc29sdmVFbGFzdGljS2V5d29yZCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcmVzb2x2ZXIgPSB0aGlzLl9vcHRpb25hbERlcGVuZGVuY2llcy5zZWFyY2hJbmRleFJlc29sdmVyO1xuICAgICAgICBzd2l0Y2ggKHRoaXMuX2ZpZWxkVHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgICAgICAgICB0aGlzLl9lbGFzdGljS2V5d29yZCA9IHJlc29sdmVyLmdldEluZGV4KHRoaXMuX2ZpZWxkSWQsIFNlYXJjaEluZGV4Lk5VTUJFUik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgICAgIGNhc2UgJ2RhdGVUaW1lJzpcbiAgICAgICAgICAgICAgICB0aGlzLl9lbGFzdGljS2V5d29yZCA9IHJlc29sdmVyLmdldEluZGV4KHRoaXMuX2ZpZWxkSWQsIFNlYXJjaEluZGV4LlRJTUVTVEFNUCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgICAgICAgICB0aGlzLl9lbGFzdGljS2V5d29yZCA9IHJlc29sdmVyLmdldEluZGV4KHRoaXMuX2ZpZWxkSWQsIFNlYXJjaEluZGV4LkJPT0xFQU4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZmlsZSc6XG4gICAgICAgICAgICBjYXNlICdmaWxlTGlzdCc6XG4gICAgICAgICAgICAgICAgdGhpcy5fZWxhc3RpY0tleXdvcmQgPSByZXNvbHZlci5nZXRJbmRleCh0aGlzLl9maWVsZElkLCBTZWFyY2hJbmRleC5GSUxFX05BTUUsIHRoaXMuaXNTZWxlY3RlZE9wZXJhdG9yKFN1YnN0cmluZykpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAndXNlcic6XG4gICAgICAgICAgICBjYXNlICd1c2VyTGlzdCc6XG4gICAgICAgICAgICAgICAgdGhpcy5fZWxhc3RpY0tleXdvcmQgPSByZXNvbHZlci5nZXRJbmRleCh0aGlzLl9maWVsZElkLCBTZWFyY2hJbmRleC5VU0VSX0lEKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhpcy5fZWxhc3RpY0tleXdvcmQgPSByZXNvbHZlci5nZXRJbmRleCh0aGlzLl9maWVsZElkLCBTZWFyY2hJbmRleC5GVUxMVEVYVCwgdGhpcy5pc1NlbGVjdGVkT3BlcmF0b3IoU3Vic3RyaW5nKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0IGVsYXN0aWNLZXl3b3JkcygpOiBBcnJheTxzdHJpbmc+IHtcbiAgICAgICAgaWYgKCF0aGlzLl9maWVsZElkKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gW3RoaXMuX2VsYXN0aWNLZXl3b3JkXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgc2VsZWN0ZWRPcGVyYXRvcigpOiBPcGVyYXRvcjxhbnk+IHtcbiAgICAgICAgc3dpdGNoICh0aGlzLl9maWVsZFR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29wZXJhdG9yU2VydmljZS5nZXRPcGVyYXRvcihFcXVhbHMpO1xuICAgICAgICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29wZXJhdG9yU2VydmljZS5nZXRPcGVyYXRvcihFcXVhbHMpO1xuICAgICAgICAgICAgY2FzZSAndXNlcic6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29wZXJhdG9yU2VydmljZS5nZXRPcGVyYXRvcihFcXVhbHMpO1xuICAgICAgICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29wZXJhdG9yU2VydmljZS5nZXRPcGVyYXRvcihFcXVhbHNEYXRlKTtcbiAgICAgICAgICAgIGNhc2UgJ2RhdGVUaW1lJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3BlcmF0b3JTZXJ2aWNlLmdldE9wZXJhdG9yKEVxdWFsc0RhdGVUaW1lKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29wZXJhdG9yU2VydmljZS5nZXRPcGVyYXRvcihTdWJzdHJpbmcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZHVwbGljYXRlKCk6IENhc2VTaW1wbGVEYXRhc2V0IHtcbiAgICAgICAgcmV0dXJuIG5ldyBDYXNlU2ltcGxlRGF0YXNldCh0aGlzLl9vcGVyYXRvclNlcnZpY2UsIHRoaXMuX2xvZywgdGhpcy5fb3B0aW9uYWxEZXBlbmRlbmNpZXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSB7QGxpbmsgQ2FzZURhdGFzZXR9IGluc3RhbmNlIGFuZCBjb25maWd1cmVzIGl0IHNvLCB0aGF0IHRoZSBxdWVyeSBpdCBnZW5lcmF0ZXMgdGFyZ2V0c1xuICAgICAqIHRoZSBzZWxlY3RlZCBmaWVsZCwgdXNlcyB0aGUgZGVmYXVsdCBvcGVyYXRvciBhbmQgaXRzIG9wZXJhbmRzIGFyZSB3aGF0IHRoZSB1c2VyIHByb3ZpZGVkLlxuICAgICAqXG4gICAgICogQHBhcmFtIGZpZWxkVHlwZSB0aGUgdHlwZSBvZiB0aGUgZmllbGQgdGhhdCBzaG91bGQgYmUgdGFyZ2V0ZWQgYnkgdGhlIHRyYW5zZm9ybWVkIENhdGVnb3J5XG4gICAgICogQHBhcmFtIGZpZWxkVGl0bGUgdGhlIHRpdGxlIG9mIHRoZSBmaWVsZCB0aGF0IHNob3VsZCBiZSB0YXJnZXRlZCBieSB0aGUgdHJhbnNmb3JtZWQgQ2F0ZWdvcnlcbiAgICAgKiBAcGFyYW0gdXNlcklucHV0IHRoZSBvcGVyYW5kcyBmb3IgdGhlIHF1ZXJpZWQgZmllbGRcbiAgICAgKiBAcmV0dXJucyBhIG5ldyB7QGxpbmsgQ2FzZURhdGFzZXR9IGNvbmZpZ3VyZWQgd2l0aCB0aGUgcHJvdmlkZWQgdmFsdWVzXG4gICAgICovXG4gICAgcHVibGljIHRyYW5zZm9ybVRvQ2FzZURhdGFzZXQoZmllbGRUeXBlOiBzdHJpbmcsIGZpZWxkVGl0bGU6IHN0cmluZywgdXNlcklucHV0OiBBcnJheTxhbnk+KTogQ2FzZURhdGFzZXQge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLl9vcHRpb25hbERlcGVuZGVuY2llcy5jYXRlZ29yeUZhY3RvcnkuZ2V0KENhc2VEYXRhc2V0KSBhcyBDYXNlRGF0YXNldDtcbiAgICAgICAgcmVzdWx0LnNlbGVjdERhdGFmaWVsZHMoRGF0YWZpZWxkTWFwS2V5LnNlcmlhbGl6ZWRGb3JtKGZpZWxkVHlwZSwgZmllbGRUaXRsZSkpO1xuICAgICAgICByZXN1bHQuc2V0T3BlcmFuZHModXNlcklucHV0KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2VuZXJhdGVRdWVyeSh1c2VySW5wdXQ6IEFycmF5PHVua25vd24+KTogUXVlcnkge1xuICAgICAgICBjb25zdCB2YWx1ZVF1ZXJ5ID0gdGhpcy5zZWxlY3RlZE9wZXJhdG9yLmNyZWF0ZVF1ZXJ5KHRoaXMuZWxhc3RpY0tleXdvcmRzLCB1c2VySW5wdXQpO1xuICAgICAgICBjb25zdCBuZXRzUXVlcnkgPSBRdWVyeS5jb21iaW5lUXVlcmllcyhcbiAgICAgICAgICAgIHRoaXMuX25ldElkZW50aWZpZXJzLm1hcChpZCA9PiB0aGlzLl9wcm9jZXNzQ2F0ZWdvcnkuZ2VuZXJhdGVQcmVkaWNhdGUoW1tpZF1dKS5xdWVyeSksXG4gICAgICAgICAgICBCb29sZWFuT3BlcmF0b3IuT1JcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIFF1ZXJ5LmNvbWJpbmVRdWVyaWVzKFt2YWx1ZVF1ZXJ5LCBuZXRzUXVlcnldLCBCb29sZWFuT3BlcmF0b3IuQU5EKTtcbiAgICB9XG5cbiAgICBzZXJpYWxpemVDbGFzcygpOiBDYXRlZ29yaWVzIHwgc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIENhdGVnb3JpZXMuQ0FTRV9TSU1QTEVfREFUQVNFVDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXJpYWxpemF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQuIFRocm93cyBhbiBlcnJvci5cbiAgICAgKi9cbiAgICBjcmVhdGVNZXRhZGF0YSgpOiBuZXZlciB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2FzZVNpbXBsZURhdGFzZXQgZG9lcyBub3Qgc3VwcG9ydCBzZXJpYWxpemF0aW9uIScpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlc2VyaWFsaXphdGlvbiBpcyBub3Qgc3VwcG9ydGVkLiBUaHJvd3MgYW4gZXJyb3IuXG4gICAgICovXG4gICAgbG9hZEZyb21NZXRhZGF0YShtZXRhZGF0YTogQ2F0ZWdvcnlHZW5lcmF0b3JNZXRhZGF0YSk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhc2VTaW1wbGVEYXRhc2V0IGRvZXMgbm90IHN1cHBvcnQgZGVzZXJpYWxpemF0aW9uIScpO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -7,23 +7,33 @@ import { Like } from '../../operator/like';
|
|
|
7
7
|
import { Categories } from '../categories';
|
|
8
8
|
import { CaseSearch } from './case-search.enum';
|
|
9
9
|
export class CaseTitle extends NoConfigurationCategory {
|
|
10
|
-
constructor(operators, logger) {
|
|
10
|
+
constructor(operators, logger, _optionalDependencies) {
|
|
11
11
|
super([CaseSearch.TITLE], [
|
|
12
12
|
operators.getOperator(Substring),
|
|
13
13
|
operators.getOperator(Equals),
|
|
14
14
|
operators.getOperator(NotEquals),
|
|
15
15
|
operators.getOperator(Like)
|
|
16
16
|
], `${CaseTitle._i18n}.name`, SearchInputType.TEXT, logger, operators);
|
|
17
|
+
this._optionalDependencies = _optionalDependencies;
|
|
17
18
|
}
|
|
18
19
|
get inputPlaceholder() {
|
|
19
20
|
return `${CaseTitle._i18n}.placeholder`;
|
|
20
21
|
}
|
|
21
22
|
duplicate() {
|
|
22
|
-
return new CaseTitle(this._operatorService, this._log);
|
|
23
|
+
return new CaseTitle(this._operatorService, this._log, this._optionalDependencies);
|
|
23
24
|
}
|
|
24
25
|
serializeClass() {
|
|
25
26
|
return Categories.CASE_TITLE;
|
|
26
27
|
}
|
|
28
|
+
get elasticKeywords() {
|
|
29
|
+
if (!!this._optionalDependencies) {
|
|
30
|
+
const resolver = this._optionalDependencies.searchIndexResolver;
|
|
31
|
+
return [resolver.getCoreIndex(CaseSearch.TITLE, this.isSelectedOperator(Substring))];
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
return this._elasticKeywords;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
27
37
|
}
|
|
28
38
|
CaseTitle._i18n = 'search.category.case.title';
|
|
29
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
39
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FzZS10aXRsZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BuZXRncmlmL2NvbXBvbmVudHMtY29yZS8iLCJzb3VyY2VzIjpbImxpYi9zZWFyY2gvbW9kZWxzL2NhdGVnb3J5L2Nhc2UvY2FzZS10aXRsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFFbkQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ3JELE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQ3JFLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUM3QyxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDcEQsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3pDLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRzlDLE1BQU0sT0FBTyxTQUFVLFNBQVEsdUJBQStCO0lBSTFELFlBQVksU0FBMEIsRUFBRSxNQUFxQixFQUFZLHFCQUE0QztRQUNqSCxLQUFLLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQ3BCO1lBQ0ksU0FBUyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUM7WUFDaEMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUM7WUFDN0IsU0FBUyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUM7WUFDaEMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7U0FDOUIsRUFDRCxHQUFHLFNBQVMsQ0FBQyxLQUFLLE9BQU8sRUFDekIsZUFBZSxDQUFDLElBQUksRUFDcEIsTUFBTSxFQUNOLFNBQVMsQ0FBQyxDQUFDO1FBWHNELDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBdUI7SUFZckgsQ0FBQztJQUVELElBQUksZ0JBQWdCO1FBQ2hCLE9BQU8sR0FBRyxTQUFTLENBQUMsS0FBSyxjQUFjLENBQUM7SUFDNUMsQ0FBQztJQUVELFNBQVM7UUFDTCxPQUFPLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBQ3ZGLENBQUM7SUFFRCxjQUFjO1FBQ1YsT0FBTyxVQUFVLENBQUMsVUFBVSxDQUFDO0lBQ2pDLENBQUM7SUFFRCxJQUFjLGVBQWU7UUFDekIsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFO1lBQzlCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxtQkFBbUIsQ0FBQztZQUNoRSxPQUFPLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDeEY7YUFBTTtZQUNILE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDO1NBQ2hDO0lBQ0wsQ0FBQzs7QUFuQ3VCLGVBQUssR0FBRyw0QkFBNEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7T3BlcmF0b3JTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9vcGVyYXRvci1zZXJ2aWNlL29wZXJhdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHtTdWJzdHJpbmd9IGZyb20gJy4uLy4uL29wZXJhdG9yL3N1YnN0cmluZyc7XG5pbXBvcnQge0xvZ2dlclNlcnZpY2V9IGZyb20gJy4uLy4uLy4uLy4uL2xvZ2dlci9zZXJ2aWNlcy9sb2dnZXIuc2VydmljZSc7XG5pbXBvcnQge1NlYXJjaElucHV0VHlwZX0gZnJvbSAnLi4vc2VhcmNoLWlucHV0LXR5cGUnO1xuaW1wb3J0IHtOb0NvbmZpZ3VyYXRpb25DYXRlZ29yeX0gZnJvbSAnLi4vbm8tY29uZmlndXJhdGlvbi1jYXRlZ29yeSc7XG5pbXBvcnQge0VxdWFsc30gZnJvbSAnLi4vLi4vb3BlcmF0b3IvZXF1YWxzJztcbmltcG9ydCB7Tm90RXF1YWxzfSBmcm9tICcuLi8uLi9vcGVyYXRvci9ub3QtZXF1YWxzJztcbmltcG9ydCB7TGlrZX0gZnJvbSAnLi4vLi4vb3BlcmF0b3IvbGlrZSc7XG5pbXBvcnQge0NhdGVnb3JpZXN9IGZyb20gJy4uL2NhdGVnb3JpZXMnO1xuaW1wb3J0IHtDYXNlU2VhcmNofSBmcm9tICcuL2Nhc2Utc2VhcmNoLmVudW0nO1xuaW1wb3J0IHtPcHRpb25hbERlcGVuZGVuY2llc30gZnJvbSAnLi4vLi4vLi4vY2F0ZWdvcnktZmFjdG9yeS9vcHRpb25hbC1kZXBlbmRlbmNpZXMnO1xuXG5leHBvcnQgY2xhc3MgQ2FzZVRpdGxlIGV4dGVuZHMgTm9Db25maWd1cmF0aW9uQ2F0ZWdvcnk8c3RyaW5nPiB7XG5cbiAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaTE4biA9ICdzZWFyY2guY2F0ZWdvcnkuY2FzZS50aXRsZSc7XG5cbiAgICBjb25zdHJ1Y3RvcihvcGVyYXRvcnM6IE9wZXJhdG9yU2VydmljZSwgbG9nZ2VyOiBMb2dnZXJTZXJ2aWNlLCBwcm90ZWN0ZWQgX29wdGlvbmFsRGVwZW5kZW5jaWVzPzogT3B0aW9uYWxEZXBlbmRlbmNpZXMpIHtcbiAgICAgICAgc3VwZXIoW0Nhc2VTZWFyY2guVElUTEVdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIG9wZXJhdG9ycy5nZXRPcGVyYXRvcihTdWJzdHJpbmcpLFxuICAgICAgICAgICAgICAgIG9wZXJhdG9ycy5nZXRPcGVyYXRvcihFcXVhbHMpLFxuICAgICAgICAgICAgICAgIG9wZXJhdG9ycy5nZXRPcGVyYXRvcihOb3RFcXVhbHMpLFxuICAgICAgICAgICAgICAgIG9wZXJhdG9ycy5nZXRPcGVyYXRvcihMaWtlKVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGAke0Nhc2VUaXRsZS5faTE4bn0ubmFtZWAsXG4gICAgICAgICAgICBTZWFyY2hJbnB1dFR5cGUuVEVYVCxcbiAgICAgICAgICAgIGxvZ2dlcixcbiAgICAgICAgICAgIG9wZXJhdG9ycyk7XG4gICAgfVxuXG4gICAgZ2V0IGlucHV0UGxhY2Vob2xkZXIoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGAke0Nhc2VUaXRsZS5faTE4bn0ucGxhY2Vob2xkZXJgO1xuICAgIH1cblxuICAgIGR1cGxpY2F0ZSgpOiBDYXNlVGl0bGUge1xuICAgICAgICByZXR1cm4gbmV3IENhc2VUaXRsZSh0aGlzLl9vcGVyYXRvclNlcnZpY2UsIHRoaXMuX2xvZywgdGhpcy5fb3B0aW9uYWxEZXBlbmRlbmNpZXMpO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZUNsYXNzKCk6IENhdGVnb3JpZXMgfCBzdHJpbmcge1xuICAgICAgICByZXR1cm4gQ2F0ZWdvcmllcy5DQVNFX1RJVExFO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXQgZWxhc3RpY0tleXdvcmRzKCk6IEFycmF5PHN0cmluZz4ge1xuICAgICAgICBpZiAoISF0aGlzLl9vcHRpb25hbERlcGVuZGVuY2llcykge1xuICAgICAgICAgICAgY29uc3QgcmVzb2x2ZXIgPSB0aGlzLl9vcHRpb25hbERlcGVuZGVuY2llcy5zZWFyY2hJbmRleFJlc29sdmVyO1xuICAgICAgICAgICAgcmV0dXJuIFtyZXNvbHZlci5nZXRDb3JlSW5kZXgoQ2FzZVNlYXJjaC5USVRMRSwgdGhpcy5pc1NlbGVjdGVkT3BlcmF0b3IoU3Vic3RyaW5nKSldO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2VsYXN0aWNLZXl3b3JkcztcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
|
|
@@ -6,18 +6,28 @@ import { NotEquals } from '../../operator/not-equals';
|
|
|
6
6
|
import { Categories } from '../categories';
|
|
7
7
|
import { CaseSearch } from './case-search.enum';
|
|
8
8
|
export class CaseVisualId extends NoConfigurationCategory {
|
|
9
|
-
constructor(operators, logger) {
|
|
9
|
+
constructor(operators, logger, _optionalDependencies) {
|
|
10
10
|
super([CaseSearch.VISUAL_ID], [operators.getOperator(Substring), operators.getOperator(Equals), operators.getOperator(NotEquals)], `${CaseVisualId._i18n}.name`, SearchInputType.TEXT, logger, operators);
|
|
11
|
+
this._optionalDependencies = _optionalDependencies;
|
|
11
12
|
}
|
|
12
13
|
get inputPlaceholder() {
|
|
13
14
|
return `${CaseVisualId._i18n}.placeholder`;
|
|
14
15
|
}
|
|
15
16
|
duplicate() {
|
|
16
|
-
return new CaseVisualId(this._operatorService, this._log);
|
|
17
|
+
return new CaseVisualId(this._operatorService, this._log, this._optionalDependencies);
|
|
17
18
|
}
|
|
18
19
|
serializeClass() {
|
|
19
20
|
return Categories.CASE_VISUAL_ID;
|
|
20
21
|
}
|
|
22
|
+
get elasticKeywords() {
|
|
23
|
+
if (!!this._optionalDependencies) {
|
|
24
|
+
const resolver = this._optionalDependencies.searchIndexResolver;
|
|
25
|
+
return [resolver.getCoreIndex(CaseSearch.VISUAL_ID, this.isSelectedOperator(Substring))];
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
return this._elasticKeywords;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
21
31
|
}
|
|
22
32
|
CaseVisualId._i18n = 'search.category.case.visualId';
|
|
23
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FzZS12aXN1YWwtaWQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AbmV0Z3JpZi9jb21wb25lbnRzLWNvcmUvIiwic291cmNlcyI6WyJsaWIvc2VhcmNoL21vZGVscy9jYXRlZ29yeS9jYXNlL2Nhc2UtdmlzdWFsLWlkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUNuRCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDckQsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDckUsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQzdDLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUNwRCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUc5QyxNQUFNLE9BQU8sWUFBYSxTQUFRLHVCQUErQjtJQUk3RCxZQUFZLFNBQTBCLEVBQUUsTUFBcUIsRUFBWSxxQkFBNEM7UUFDakgsS0FBSyxDQUFDLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxFQUN4QixDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLEVBQUUsU0FBUyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsRUFBRSxTQUFTLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQ25HLEdBQUcsWUFBWSxDQUFDLEtBQUssT0FBTyxFQUM1QixlQUFlLENBQUMsSUFBSSxFQUNwQixNQUFNLEVBQ04sU0FBUyxDQUFDLENBQUM7UUFOc0QsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtJQU9ySCxDQUFDO0lBRUQsSUFBSSxnQkFBZ0I7UUFDaEIsT0FBTyxHQUFHLFlBQVksQ0FBQyxLQUFLLGNBQWMsQ0FBQztJQUMvQyxDQUFDO0lBRUQsU0FBUztRQUNMLE9BQU8sSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFDMUYsQ0FBQztJQUVELGNBQWM7UUFDVixPQUFPLFVBQVUsQ0FBQyxjQUFjLENBQUM7SUFDckMsQ0FBQztJQUVELElBQWMsZUFBZTtRQUN6QixJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUU7WUFDOUIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLG1CQUFtQixDQUFDO1lBQ2hFLE9BQU8sQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUM1RjthQUFNO1lBQ0gsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7U0FDaEM7SUFDTCxDQUFDOztBQTlCdUIsa0JBQUssR0FBRywrQkFBK0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7T3BlcmF0b3JTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9vcGVyYXRvci1zZXJ2aWNlL29wZXJhdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHtMb2dnZXJTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi8uLi9sb2dnZXIvc2VydmljZXMvbG9nZ2VyLnNlcnZpY2UnO1xuaW1wb3J0IHtTdWJzdHJpbmd9IGZyb20gJy4uLy4uL29wZXJhdG9yL3N1YnN0cmluZyc7XG5pbXBvcnQge1NlYXJjaElucHV0VHlwZX0gZnJvbSAnLi4vc2VhcmNoLWlucHV0LXR5cGUnO1xuaW1wb3J0IHtOb0NvbmZpZ3VyYXRpb25DYXRlZ29yeX0gZnJvbSAnLi4vbm8tY29uZmlndXJhdGlvbi1jYXRlZ29yeSc7XG5pbXBvcnQge0VxdWFsc30gZnJvbSAnLi4vLi4vb3BlcmF0b3IvZXF1YWxzJztcbmltcG9ydCB7Tm90RXF1YWxzfSBmcm9tICcuLi8uLi9vcGVyYXRvci9ub3QtZXF1YWxzJztcbmltcG9ydCB7Q2F0ZWdvcmllc30gZnJvbSAnLi4vY2F0ZWdvcmllcyc7XG5pbXBvcnQge0Nhc2VTZWFyY2h9IGZyb20gJy4vY2FzZS1zZWFyY2guZW51bSc7XG5pbXBvcnQge09wdGlvbmFsRGVwZW5kZW5jaWVzfSBmcm9tICcuLi8uLi8uLi9jYXRlZ29yeS1mYWN0b3J5L29wdGlvbmFsLWRlcGVuZGVuY2llcyc7XG5cbmV4cG9ydCBjbGFzcyBDYXNlVmlzdWFsSWQgZXh0ZW5kcyBOb0NvbmZpZ3VyYXRpb25DYXRlZ29yeTxzdHJpbmc+IHtcblxuICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pMThuID0gJ3NlYXJjaC5jYXRlZ29yeS5jYXNlLnZpc3VhbElkJztcblxuICAgIGNvbnN0cnVjdG9yKG9wZXJhdG9yczogT3BlcmF0b3JTZXJ2aWNlLCBsb2dnZXI6IExvZ2dlclNlcnZpY2UsIHByb3RlY3RlZCBfb3B0aW9uYWxEZXBlbmRlbmNpZXM/OiBPcHRpb25hbERlcGVuZGVuY2llcykge1xuICAgICAgICBzdXBlcihbQ2FzZVNlYXJjaC5WSVNVQUxfSURdLFxuICAgICAgICAgICAgW29wZXJhdG9ycy5nZXRPcGVyYXRvcihTdWJzdHJpbmcpLCBvcGVyYXRvcnMuZ2V0T3BlcmF0b3IoRXF1YWxzKSwgb3BlcmF0b3JzLmdldE9wZXJhdG9yKE5vdEVxdWFscyldLFxuICAgICAgICAgICAgYCR7Q2FzZVZpc3VhbElkLl9pMThufS5uYW1lYCxcbiAgICAgICAgICAgIFNlYXJjaElucHV0VHlwZS5URVhULFxuICAgICAgICAgICAgbG9nZ2VyLFxuICAgICAgICAgICAgb3BlcmF0b3JzKTtcbiAgICB9XG5cbiAgICBnZXQgaW5wdXRQbGFjZWhvbGRlcigpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYCR7Q2FzZVZpc3VhbElkLl9pMThufS5wbGFjZWhvbGRlcmA7XG4gICAgfVxuXG4gICAgZHVwbGljYXRlKCk6IENhc2VWaXN1YWxJZCB7XG4gICAgICAgIHJldHVybiBuZXcgQ2FzZVZpc3VhbElkKHRoaXMuX29wZXJhdG9yU2VydmljZSwgdGhpcy5fbG9nLCB0aGlzLl9vcHRpb25hbERlcGVuZGVuY2llcyk7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplQ2xhc3MoKTogQ2F0ZWdvcmllcyB8IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBDYXRlZ29yaWVzLkNBU0VfVklTVUFMX0lEO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXQgZWxhc3RpY0tleXdvcmRzKCk6IEFycmF5PHN0cmluZz4ge1xuICAgICAgICBpZiAoISF0aGlzLl9vcHRpb25hbERlcGVuZGVuY2llcykge1xuICAgICAgICAgICAgY29uc3QgcmVzb2x2ZXIgPSB0aGlzLl9vcHRpb25hbERlcGVuZGVuY2llcy5zZWFyY2hJbmRleFJlc29sdmVyO1xuICAgICAgICAgICAgcmV0dXJuIFtyZXNvbHZlci5nZXRDb3JlSW5kZXgoQ2FzZVNlYXJjaC5WSVNVQUxfSUQsIHRoaXMuaXNTZWxlY3RlZE9wZXJhdG9yKFN1YnN0cmluZykpXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9lbGFzdGljS2V5d29yZHM7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
|
|
@@ -232,7 +232,7 @@ export class Category {
|
|
|
232
232
|
if (!this.isOperatorSelected()) {
|
|
233
233
|
throw new Error('Category cannot generate a Query if no Operator is selected');
|
|
234
234
|
}
|
|
235
|
-
return this._operatorFormControl.value.createQuery(this.
|
|
235
|
+
return this._operatorFormControl.value.createQuery(this.elasticKeywords, userInput);
|
|
236
236
|
}
|
|
237
237
|
/**
|
|
238
238
|
* Calls the [generateQuery]{@link Category#generateQuery} method and creates an {@link ElementaryPredicate} with the result.
|
|
@@ -516,9 +516,17 @@ export class Category {
|
|
|
516
516
|
}
|
|
517
517
|
return { segment, bold: true };
|
|
518
518
|
}
|
|
519
|
+
/**
|
|
520
|
+
* Checks for selected operator
|
|
521
|
+
* @param operatorClass the operator to be checked
|
|
522
|
+
* @return boolean of the statement
|
|
523
|
+
*/
|
|
524
|
+
isSelectedOperator(operatorClass) {
|
|
525
|
+
return this.selectedOperator === this._operatorService.getOperator(operatorClass);
|
|
526
|
+
}
|
|
519
527
|
}
|
|
520
528
|
/**
|
|
521
529
|
* The {@link CategoryMetadataConfiguration} key for this Category's {@link Operator}
|
|
522
530
|
*/
|
|
523
531
|
Category.OPERATOR_METADATA = 'operator';
|
|
524
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0ZWdvcnkuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AbmV0Z3JpZi9jb21wb25lbnRzLWNvcmUvIiwic291cmNlcyI6WyJsaWIvc2VhcmNoL21vZGVscy9jYXRlZ29yeS9jYXRlZ29yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFHOUMsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFDdEUsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3BELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUMsZUFBZSxFQUFFLFFBQVEsRUFBYyxFQUFFLEVBQUUsYUFBYSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQzlFLE9BQU8sRUFBQyxZQUFZLEVBQUUsY0FBYyxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ2pFLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQy9ELE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLHVDQUF1QyxDQUFDO0FBQzFFLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBSzFELE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUVoRCxPQUFPLEVBQUMsa0JBQWtCLEVBQUUsdUJBQXVCLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUV6Rjs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUNILE1BQU0sT0FBZ0IsUUFBUTtJQTZDMUI7Ozs7Ozs7Ozs7T0FVRztJQUNILFlBQXlDLGdCQUErQixFQUMvQixpQkFBdUMsRUFDMUMsZUFBdUIsRUFDcEIsVUFBMkIsRUFDcEMsSUFBbUIsRUFDbkIsZ0JBQWlDO1FBTHhCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBZTtRQUMvQixzQkFBaUIsR0FBakIsaUJB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O0lBQ08sOEJBQThCLENBQUMsWUFBb0I7UUFDekQsSUFBSSxPQUFPLENBQUM7UUFDWixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsWUFBWSxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQy9ELFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNwQixLQUFLLGVBQWUsQ0FBQyxZQUFZO2dCQUM3QixPQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztnQkFDdkIsTUFBTTtZQUNWLEtBQUssZUFBZSxDQUFDLElBQUk7Z0JBQ3JCLE9BQU8sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7Z0JBQzdDLE1BQU07WUFDVixLQUFLLGVBQWUsQ0FBQyxTQUFTO2dCQUMxQixPQUFPLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO2dCQUNsRCxNQUFNO1lBQ1Y7Z0JBQ0ksT0FBTyxHQUFHLE9BQU8sQ0FBQztnQkFDbEIsTUFBTTtTQUNiO1FBQ0QsT0FBTyxFQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFDLENBQUM7SUFDakMsQ0FBQzs7QUF0bkJEOztHQUVHO0FBQ3VCLDBCQUFpQixHQUFHLFVBQVUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7T3BlcmF0b3J9IGZyb20gJy4uL29wZXJhdG9yL29wZXJhdG9yJztcbmltcG9ydCB7TG9nZ2VyU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vbG9nZ2VyL3NlcnZpY2VzL2xvZ2dlci5zZXJ2aWNlJztcbmltcG9ydCB7UXVlcnl9IGZyb20gJy4uL3F1ZXJ5L3F1ZXJ5JztcbmltcG9ydCB7RWxlbWVudGFyeVByZWRpY2F0ZX0gZnJvbSAnLi4vcHJlZGljYXRlL2VsZW1lbnRhcnktcHJlZGljYXRlJztcbmltcG9ydCB7U2VhcmNoSW5wdXRUeXBlfSBmcm9tICcuL3NlYXJjaC1pbnB1dC10eXBlJztcbmltcG9ydCB7Rm9ybUNvbnRyb2x9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBmb3JrSm9pbiwgT2JzZXJ2YWJsZSwgb2YsIFJlcGxheVN1YmplY3R9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtkZWJvdW5jZVRpbWUsIGRlZmF1bHRJZkVtcHR5LCBtYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7T3BlcmF0b3JUZW1wbGF0ZVBhcnR9IGZyb20gJy4uL29wZXJhdG9yLXRlbXBsYXRlLXBhcnQnO1xuaW1wb3J0IHtJbmNyZW1lbnRpbmdDb3VudGVyfSBmcm9tICcuLi8uLi8uLi91dGlsaXR5L2luY3JlbWVudGluZy1jb3VudGVyJztcbmltcG9ydCB7Q29uZmlndXJhdGlvbklucHV0fSBmcm9tICcuLi9jb25maWd1cmF0aW9uLWlucHV0JztcbmltcG9ydCB7Q2F0ZWdvcnlHZW5lcmF0b3JNZXRhZGF0YSwgQ2F0ZWdvcnlNZXRhZGF0YUNvbmZpZ3VyYXRpb259IGZyb20gJy4uL3BlcnNpc3RhbmNlL2dlbmVyYXRvci1tZXRhZGF0YSc7XG5pbXBvcnQge0NhdGVnb3JpZXN9IGZyb20gJy4vY2F0ZWdvcmllcyc7XG5pbXBvcnQge09wZXJhdG9yU2VydmljZX0gZnJvbSAnLi4vLi4vb3BlcmF0b3Itc2VydmljZS9vcGVyYXRvci5zZXJ2aWNlJztcbmltcG9ydCB7T3BlcmF0b3JzfSBmcm9tICcuLi9vcGVyYXRvci9vcGVyYXRvcnMnO1xuaW1wb3J0IHtvZlZvaWR9IGZyb20gJy4uLy4uLy4uL3V0aWxpdHkvb2Ytdm9pZCc7XG5pbXBvcnQge0ZpbHRlclRleHRTZWdtZW50fSBmcm9tICcuLi9wZXJzaXN0YW5jZS9maWx0ZXItdGV4dC1zZWdtZW50JztcbmltcG9ydCB7REFURV9GT1JNQVRfU1RSSU5HLCBEQVRFX1RJTUVfRk9STUFUX1NUUklOR30gZnJvbSAnLi4vLi4vLi4vbW9tZW50L3RpbWUtZm9ybWF0cyc7XG5cbi8qKlxuICogVGhlIHRvcCBsZXZlbCBvZiBhYnN0cmFjdGlvbiBpbiBzZWFyY2ggcXVlcnkgZ2VuZXJhdGlvbi4gUmVwcmVzZW50cyBhIHNldCBvZiBpbmRleGVkIGZpZWxkcyB0aGF0IGNhbiBiZSBzZWFyY2hlZC5cbiAqIEVuY2Fwc3VsYXRlcyB0aGUgdGhlIHN0YXRlIGFuZCBsb2dpYyBvZiB0aGUgcXVlcnkgY29uc3RydWN0aW9uIHByb2Nlc3MuXG4gKlxuICogQXMgb3Bwb3NlZCB0byB7QGxpbmsgT3BlcmF0b3J9cyBDYXRlZ29yaWVzIGFyZSBub3Qgc3RhdGVsZXNzIGFuZCBzaG91bGRuJ3QgYmUgc2hhcmVkLlxuICogQSBzaW5nbGUgQ2F0ZWdvcnkgaW5zdGFuY2UgaXMgY2FwYWJsZSBvZiBob2xkaW5nIHRoZSBzdGF0ZSBvZiBvbmUge0BsaW5rIEVkaXRhYmxlUHJlZGljYXRlfSxcbiAqIG9yIGNhbiBiZSB1c2VkIGFzIGEgYnVpbGRlciB0byBmb3JtIGFuIHVubGltaXRlZCBhbW91bnQgb2YgW0VsZW1lbnRhcnlQcmVkaWNhdGVzXXtAbGluayBFbGVtZW50YXJ5UHJlZGljYXRlfS5cbiAqXG4gKiBZb3UgY2FuIHVzZSB7QGxpbmsgQ2F0ZWdvcnlGYWN0b3J5fSB0byBnZXQgaW5zdGFuY2VzIG9mIENhdGVnb3J5IGNsYXNzZXMuXG4gKiBBbHRlcm5hdGl2ZWx5IHlvdSBjYW4gdXNlIHRoZSBbY2xvbmUoKV17QExpbmsgQ2F0ZWdvcnkjY2xvbmV9IG1ldGhvZCB0byBkdXBsaWNhdGUgYW4gZXhpc3RpbmcgaW5zdGFuY2UuXG4gKlxuICogSWYgeW91IHdhbnQgdG8gbWFrZSB5b3VyIG93biBDYXRlZ29yeSBjbGFzcyB5b3UgaGF2ZSB0byBtYWtlIHN1cmUgdGhhdCB0aGUgY29uc3RydWN0b3IgdGFrZXMge0BsaW5rIE9wZXJhdG9yU2VydmljZX0gYXMgaXQncyBmaXJzdFxuICogYXJndW1lbnQgYW5kIHtAbGluayBMb2dnZXJTZXJ2aWNlfSBhcyBpdCdzIHNlY29uZCBhcmd1bWVudC4gQWx0ZXJuYXRpdmVseSB5b3UgY2FuIG1ha2UgeW91ciBvd24gaW1wbGVtZW50YXRpb24gb2YgdGhlXG4gKiB7QGxpbmsgQ2F0ZWdvcnlGYWN0b3J5fSBzbywgdGhhdCB5b3VyIHN0eWxlIG9mIGNvbnN0cnVjdG9ycyBpcyBzdXBwb3J0ZWQuXG4gKlxuICogQHR5cGVwYXJhbSBUIHR5cGUgb2Ygb2JqZWN0cyB0aGUgY2F0ZWdvcnkgZXhwZWN0cyB0byBnZW5lcmF0ZSBxdWVyaWVzIGZyb21cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENhdGVnb3J5PFQ+IHtcblxuICAgIC8qKlxuICAgICAqIFRoZSB7QGxpbmsgQ2F0ZWdvcnlNZXRhZGF0YUNvbmZpZ3VyYXRpb259IGtleSBmb3IgdGhpcyBDYXRlZ29yeSdzIHtAbGluayBPcGVyYXRvcn1cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgc3RhdGljIHJlYWRvbmx5IE9QRVJBVE9SX01FVEFEQVRBID0gJ29wZXJhdG9yJztcblxuICAgIC8qKlxuICAgICAqIENvbnRhaW5zIHRoZSBgRm9ybUNvbnRyb2xgIG9iamVjdCB0aGF0IGlzIHVzZWQgdG8gZHJpdmUgdGhlIG9wZXJhdG9yIHNlbGVjdGlvbi5cbiAgICAgKlxuICAgICAqIFRoZSBjYXRlZ29yeSBjYW4gc3Vic2NyaWJlIHRvIGl0IGlmIGl0IHdpc2hlcyB0byByZWFjdCB0byB0aGUgc2VsZWN0aW9uIGNoYW5nZSBieSB0aGUgdXNlci5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgX29wZXJhdG9yRm9ybUNvbnRyb2w6IEZvcm1Db250cm9sO1xuXG4gICAgLyoqXG4gICAgICogU3RvcmVzIHRoZSBgRm9ybUNvbnRyb2xgIG9iamVjdHMgdGhhdCBhcmUgcHVzaGVkIGludG8gdGhlIG9ic2VydmFibGUgd2hlbiB0aGUgbnVtYmVyIG9mIG9wZXJhbmRzIGNoYW5nZXMuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIF9vcGVyYW5kc0Zvcm1Db250cm9sczogQXJyYXk8Rm9ybUNvbnRyb2w+O1xuXG4gICAgLyoqXG4gICAgICogQ29udGFpbnMgdGhlIGBGb3JtQ29udHJvbGAgb2JqZWN0cyB0aGF0IGNhbiBiZSB1c2VkIHRvIGlucHV0IHNlYXJjaCBhcmd1bWVudHMuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIF9vcGVyYW5kc0Zvcm1Db250cm9scyQ6IFJlcGxheVN1YmplY3Q8QXJyYXk8Rm9ybUNvbnRyb2w+IHwgdW5kZWZpbmVkPjtcblxuICAgIC8qKlxuICAgICAqIENvbnRhaW5zIHRoZSBvcGVyYXRvciB0ZW1wbGF0ZSBwYXJ0cyB0aGF0IG1ha2UgdXAgdGhlIG9wZXJhbmRzIEdVSS5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgX29wZXJhdG9yVGVtcGxhdGUkOiBCZWhhdmlvclN1YmplY3Q8QXJyYXk8T3BlcmF0b3JUZW1wbGF0ZVBhcnQ+IHwgdW5kZWZpbmVkPjtcblxuICAgIC8qKlxuICAgICAqIEdlbmVyYXRlcyBJRHMgZm9yIHRlbXBsYXRlIHBhcnRzIHN1cHBsaWVkIHRvIG5nIGZvci5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgX3RyYWNrQnlJZEdlbmVyYXRvcjogSW5jcmVtZW50aW5nQ291bnRlcjtcblxuICAgIC8qKlxuICAgICAqIEVtaXQgYSBuZXcgYFByZWRpY2F0ZWAgaWYgdGhlIGBDYXRlZ29yeWAgaXMgaW4gYSBzdGF0ZSB0aGF0IGl0IGNhbiBiZSBjcmVhdGVkLlxuICAgICAqIEVtaXRzIGB1bmRlZmluZWRgIGlmIHRoZSBgQ2F0ZWdvcnlgIGlzIG5vdCBpbiBzdWNoIHN0YXRlLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBfZ2VuZXJhdGVkUHJlZGljYXRlJDogQmVoYXZpb3JTdWJqZWN0PEVsZW1lbnRhcnlQcmVkaWNhdGUgfCB1bmRlZmluZWQ+O1xuXG4gICAgLyoqXG4gICAgICogVXRpbGl0eSB2YXJpYWJsZSB0aGF0IGNhbiBiZSB1c2VkIGFzIHZhbHVlIGZvciB0aGUgW2NvbmZpZ3VyYXRpb25JbnB1dHMkXXtAbGluayBDYXRlZ29yeSNjb25maWd1cmF0aW9uSW5wdXRzJH0gYE9ic2VydmFibGVgLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBfT1BFUkFUT1JfSU5QVVQ6IENvbmZpZ3VyYXRpb25JbnB1dDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb25zdHJ1Y3RvciBmaWxscyB0aGUgdmFsdWVzIG9mIGFsbCBwcm90ZWN0ZWQgZmllbGRzIGFuZCB0aGVuIGNhbGxzIHRoZSBbaW5pdGlhbGl6ZUNhdGVnb3J5KClde0BsaW5rIENhdGVnb3J5I2luaXRpYWxpemVDYXRlZ29yeX1cbiAgICAgKiBtZXRob2QuIElmIHlvdSB3YW50IHRvIG92ZXJyaWRlIHRoZSBjYXRlZ29yeSBjcmVhdGlvbiBiZWhhdmlvciBvdmVycmlkZSB0aGF0IG1ldGhvZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBfZWxhc3RpY0tleXdvcmRzIEVsYXN0aWNzZWFyY2gga2V5d29yZHMgdGhhdCBzaG91bGQgYmUgcXVlcmllZCBieSBxdWVyaWVzIGdlbmVyYXRlZCB3aXRoIHRoaXMgY2F0ZWdvcnlcbiAgICAgKiBAcGFyYW0gX2FsbG93ZWRPcGVyYXRvcnMgT3BlcmF0b3JzIHRoYXQgY2FuIGJlIHVzZWQgdG8gZ2VuZXJhdGVkIHF1ZXJpZXMgb24gdGhlIGFib3ZlIGtleXdvcmRzXG4gICAgICogQHBhcmFtIHRyYW5zbGF0aW9uUGF0aCBwYXRoIHRvIHRoZSB0cmFuc2xhdGlvbiBzdHJpbmdcbiAgICAgKiBAcGFyYW0gX2lucHV0VHlwZSBpbnB1dCBmaWVsZCB0eXBlIHRoYXQgc2hvdWxkIGJlIHVzZWQgdG8gZW50ZXIgb3BlcmF0b3IgYXJndW1lbnRzIGZvciB0aGlzIGNhdGVnb3J5XG4gICAgICogQHBhcmFtIF9sb2cgdXNlZCB0byByZWNvcmQgaW5mb3JtYXRpb24gYWJvdXQgaW5jb3JyZWN0IHVzZSBvZiB0aGlzIGNsYXNzXG4gICAgICogQHBhcmFtIF9vcGVyYXRvclNlcnZpY2UgdXNlZCB0byByZXNvbHZlIHNlcmlhbGl6ZWQgb3BlcmF0b3JzIGR1cmluZyBkZXNlcmlhbGl6YXRpb25cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgY29uc3RydWN0b3IocHJvdGVjdGVkIHJlYWRvbmx5IF9lbGFzdGljS2V5d29yZHM6IEFycmF5PHN0cmluZz4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZCByZWFkb25seSBfYWxsb3dlZE9wZXJhdG9yczogQXJyYXk8T3BlcmF0b3I8YW55Pj4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyByZWFkb25seSB0cmFuc2xhdGlvblBhdGg6IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkIHJlYWRvbmx5IF9pbnB1dFR5cGU6IFNlYXJjaElucHV0VHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9sb2c6IExvZ2dlclNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfb3BlcmF0b3JTZXJ2aWNlOiBPcGVyYXRvclNlcnZpY2UpIHtcbiAgICAgICAgdGhpcy5fT1BFUkFUT1JfSU5QVVQgPSBuZXcgQ29uZmlndXJhdGlvbklucHV0KFxuICAgICAgICAgICAgU2VhcmNoSW5wdXRUeXBlLk9QRVJBVE9SLFxuICAgICAgICAgICAgJ3NlYXJjaC5vcGVyYXRvci5uYW1lJyxcbiAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgbmV3IE1hcDxzdHJpbmcsIEFycmF5PHVua25vd24+PigpLFxuICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ29uZmlndXJhdGlvbklucHV0IG9mIHR5cGUgT1BFUkFUT1IgaXMgYSBwbGFjZWhvbGRlciEnXG4gICAgICAgICAgICAgICAgICAgICsgJyBVc2Ugb3BlcmF0b3IgcmVsYXRlZCBtZXRob2RzIGZyb20gdGhlIENhdGVnb3J5IGNsYXNzIGluc3RlYWQuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fb3BlcmF0b3JGb3JtQ29udHJvbCA9IHRoaXMuX09QRVJBVE9SX0lOUFVULmZvcm1Db250cm9sO1xuICAgICAgICB0aGlzLl9vcGVyYW5kc0Zvcm1Db250cm9scyQgPSBuZXcgUmVwbGF5U3ViamVjdDxBcnJheTxGb3JtQ29udHJvbD4gfCB1bmRlZmluZWQ+KDEpO1xuICAgICAgICB0aGlzLl9vcGVyYXRvclRlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXJyYXk8T3BlcmF0b3JUZW1wbGF0ZVBhcnQ+IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICAgICAgICB0aGlzLl9vcGVyYW5kc0Zvcm1Db250cm9scyA9IFtdO1xuICAgICAgICB0aGlzLl90cmFja0J5SWRHZW5lcmF0b3IgPSBuZXcgSW5jcmVtZW50aW5nQ291bnRlcigpO1xuICAgICAgICB0aGlzLl9nZW5lcmF0ZWRQcmVkaWNhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxFbGVtZW50YXJ5UHJlZGljYXRlIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICAgICAgICB0aGlzLmluaXRpYWxpemVDYXRlZ29yeSgpO1xuXG4gICAgICAgIHRoaXMub3BlcmFuZHNGb3JtQ29udHJvbHMkLnBpcGUoXG4gICAgICAgICAgICBtYXAoZm9ybUNvbnRyb2xzID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWZvcm1Db250cm9scykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHBhcnRzID0gdGhpcy5zZWxlY3RlZE9wZXJhdG9yLmdldE9wZXJhdG9yTmFtZVRlbXBsYXRlKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZmNzID0gWy4uLmZvcm1Db250cm9sc107XG4gICAgICAgICAgICAgICAgbGV0IGZpcnN0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFydHMubWFwKHBhcnQgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZW1wbGF0ZSA9IG5ldyBPcGVyYXRvclRlbXBsYXRlUGFydChwYXJ0ID8gcGFydCA6IGZjcy5zaGlmdCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHJhY2tCeUlkR2VuZXJhdG9yLm5leHQoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnQgPyB1bmRlZmluZWQgOiBmaXJzdCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghcGFydCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3QgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApLnN1YnNjcmliZSh0ZW1wbGF0ZSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9vcGVyYXRvclRlbXBsYXRlJC5uZXh0KHRlbXBsYXRlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xlYW5zIHVwIHRoZSBpbnRlcm5hbCBzdGF0ZSBvZiB0aGUgb2JqZWN0IGJlZm9yZSBpdHMgZGVzdHJ1Y3Rpb24uXG4gICAgICpcbiAgICAgKiBUaGUgZGV2ZWxvcGVyIG11c3QgY2FsbCB0aGlzIG1ldGhvZCBhdCBhbiBhcHByb3ByaWF0ZSBtb21lbnQsIGFzIHRoaXMgb2JqZWN0IGNhbm5vdCBob29rIGludG8gdGhlIEFuZ3VsYXIgbGlmZWN5Y2xlLlxuICAgICAqL1xuICAgIHB1YmxpYyBkZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9vcGVyYW5kc0Zvcm1Db250cm9scyQuY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5fb3BlcmF0b3JUZW1wbGF0ZSQuY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5fZ2VuZXJhdGVkUHJlZGljYXRlJC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyYXRpb24gaW5wdXQgcmVwcmVzZW50IHRoZSBzdGVwcyB0aGF0IGFyZSBuZWNlc3NhcnkgdG8gY29uZmlndXJlIHRoZSBjYXRlZ29yeS5cbiAgICAgKiBUaGUgbGFzdCBpbnB1dCBtdXN0IGFsd2F5cyBiZSBvZiB0eXBlIFtPUEVSQVRPUl17QGxpbmsgU2VhcmNoSW5wdXRUeXBlI09QRVJBVE9SfS5cbiAgICAgKiBTZWxlY3RpbmcgdGhlIG9wZXJhdG9yIGNvbXBsZXRlcyB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUgY2F0ZWdvcnkgYW5kIHRoZSBhcmd1bWVudHMgaW5wdXRzXG4gICAgICogKGJhc2VkIG9uIGNhdGVnb3J5IGlucHV0IHR5cGUgYW5kIG9wZXJhdG9yIGFyaXR5KSBhcmUgZGlzcGxheWVkLlxuICAgICAqXG4gICAgICogQmV3YXJlIHRoYXQgd2hpbGUgbW9zdCBjYXRlZ29yaWVzIGFsd2F5cyByZXR1cm4gdGhlIHNhbWUgY29uc3RhbnQgaXQgbXVzdCBub3QgYWx3YXlzIGJlIHRoZSBjYXNlLlxuICAgICAqXG4gICAgICogQHJldHVybnMgdGhlIHJlcXVpcmVkIGlucHV0IHR5cGUgZm9yIGNvbmZpZ3VyYXRpb24gc3RlcHMgb2YgdGhpcyBjYXRlZ29yeVxuICAgICAqL1xuICAgIHB1YmxpYyBhYnN0cmFjdCBnZXQgY29uZmlndXJhdGlvbklucHV0cyQoKTogT2JzZXJ2YWJsZTxBcnJheTxDb25maWd1cmF0aW9uSW5wdXQ+PjtcblxuICAgIC8qKlxuICAgICAqIElmIHlvdSB1c2UgdGhlIGBDYXRlZ29yeWAgY2xhc3MgYXMgYSBzb3J0IG9mIFByZWRpY2F0ZUJ1aWxkZXIsIHRoZW4geW91IHdhbnQgdG8gdXNlIHRoZVxuICAgICAqIFtnZW5lcmF0ZVByZWRpY2F0ZSgpXXtAbGluayBDYXRlZ29yeSNnZW5lcmF0ZVByZWRpY2F0ZX0gbWV0aG9kIGluc3RlYWQuXG4gICAgICpcbiAgICAgKiBUaGlzIHN0cmVhbSBwdWJsaXNoZXMgZWl0aGVyIGEgbmV3IGBQcmVkaWNhdGVgIG9iamVjdCBvciBgdW5kZWZpbmVkYCBiYXNlZCBvbiBjaGFuZ2VzIHRvIHRoZSBgRm9ybUNvbnRyb2xzYCB0aGF0IGFyZVxuICAgICAqIG1hbmFnZWQgYnkgdGhpcyBjbGFzcy4gSWYgKGJhc2VkIG9uIHVzZXIgaW5wdXQpIHRoZSBgQ2F0ZWdvcnlgIHJlYWNoZXMgYSBzdGF0ZSB3aGVuIGNvbnN0cnVjdGlvbiBvZiBhIGBQcmVkaWNhdGVgIGlzIHBvc3NpYmxlXG4gICAgICogaXQgd2lsbCBlbWl0IHRoaXMgYFByZWRpY2F0ZWAuIElmIGl0IHJlYWNoZXMgYSBzdGF0ZSB3aGVuIHRoZSBgUHJlZGljYXRlYCBjYW4gbm90IGxvbmdlciBiZSBjcmVhdGVkIGB1bmRlZmluZWRgIGlzIGVtaXR0ZWQuXG4gICAgICovXG4gICAgcHVibGljIGdldCBnZW5lcmF0ZWRQcmVkaWNhdGUkKCk6IE9ic2VydmFibGU8RWxlbWVudGFyeVByZWRpY2F0ZSB8IHVuZGVmaW5lZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2VuZXJhdGVkUHJlZGljYXRlJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSB7QGxpbmsgUHJlZGljYXRlfSBjdXJyZW50bHkgZ2VuZXJhdGVkIGJ5IHRoZSBDYXRlZ29yeS5cbiAgICAgKlxuICAgICAqIEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZSBbZ2VuZXJhdGVkUHJlZGljYXRlJF17QGxpbmsgQ2F0ZWdvcnkjZ2VuZXJhdGVkUHJlZGljYXRlJH0uXG4gICAgICovXG4gICAgcHVibGljIGdldCBnZW5lcmF0ZWRQcmVkaWNhdGUoKTogRWxlbWVudGFyeVByZWRpY2F0ZSB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZW5lcmF0ZWRQcmVkaWNhdGUkLmdldFZhbHVlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQmV3YXJlIHRoYXQgd2hpbGUgbW9zdCBjYXRlZ29yaWVzIGFsd2F5cyByZXR1cm4gdGhlIHNhbWUgY29uc3RhbnQgaXQgaXMgbm90IGEgcmVxdWlyZW1lbnQuXG4gICAgICogQW4gZXhhbXBsZSBmb3Igc3VjaCBiZWhhdmlvciBpcyB0aGUge0BsaW5rIENhc2VEYXRhc2V0fSBjYXRlZ29yeSwgd2hlcmUgdGhlIGFyZ3VtZW50IGlucHV0IHR5cGUgZGVwZW5kc1xuICAgICAqIG9uIHRoZSBzZWxlY3RlZCBkYXRhIGZpZWxkIHR5cGUuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB0aGUgcmVxdWlyZWQgaW5wdXQgdHlwZSBmb3IgYXJndW1lbnRzIGZvciB0aGlzIGNhdGVnb3J5XG4gICAgICovXG4gICAgcHVibGljIGdldCBpbnB1dFR5cGUoKTogU2VhcmNoSW5wdXRUeXBlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lucHV0VHlwZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyB0aGUgc2V0IG9mIE9wZXJhdG9ycyB0aGF0IGNhbiBiZSB1c2VkIHdpdGggdGhpcyBjYXRlZ29yeS4gSXRlcmF0aW9uIG9yZGVyIGRldGVybWluZXMgdGhlIGRpc3BsYXkgb3JkZXIuXG4gICAgICovXG4gICAgcHVibGljIGdldCBhbGxvd2VkT3BlcmF0b3JzKCk6IEFycmF5PE9wZXJhdG9yPGFueT4+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgICAgIHJlc3VsdC5wdXNoKC4uLnRoaXMuX2FsbG93ZWRPcGVyYXRvcnMpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgb3BlcmF0b3Igb3IgYHVuZGVmaW5lZGAgaWYgbm8gb3BlcmF0b3IgaXMgc2VsZWN0ZWQuXG4gICAgICovXG4gICAgcHVibGljIGdldCBzZWxlY3RlZE9wZXJhdG9yKCk6IE9wZXJhdG9yPGFueT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fb3BlcmF0b3JGb3JtQ29udHJvbC52YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyBhbiBhcnJheSBvZiBgRm9ybUNvbnRyb2xgIG9iamVjdHMgdGhhdCBjb250YWlucyBhcyBtYW55IGNvbnRyb2xzIGFzIGlzIHRoZSBhcml0eSBvZiB0aGUgc2VsZWN0ZWQgb3BlcmF0b3IuXG4gICAgICogQ2FsbGluZyB0aGlzIG1ldGhvZCBtdWx0aXBsZSB0aW1lcyB3aWxsIHJldHVybiB0aGUgc2FtZSBgRm9ybUNvbnRyb2xgIGluc3RhbmNlcy5cbiAgICAgKiBXaGVuIG5vIG9wZXJhdG9yIGlzIHNlbGVjdGVkIGB1bmRlZmluZWRgIGlzIGVtaXR0ZWQuXG4gICAgICovXG4gICAgcHVibGljIGdldCBvcGVyYW5kc0Zvcm1Db250cm9scyQoKTogT2JzZXJ2YWJsZTxBcnJheTxGb3JtQ29udHJvbD4gfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29wZXJhbmRzRm9ybUNvbnRyb2xzJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIG5ldyB2YWx1ZSBpcyBlbWl0dGVkIHdoZW5ldmVyIHRoZSBzZWxlY3RlZCBvcGVyYXRvciBjaGFuZ2VzLiBgdW5kZWZpbmVkYCBpcyBlbWl0dGVkIGlmIG5vIG9wZXJhdG9yIGlzIHNlbGVjdGVkLlxuICAgICAqXG4gICAgICogQHJldHVybnMgW29wZXJhdG9ycyB0ZW1wbGF0ZV17QGxpbmsgT3BlcmF0b3IjZ2V0T3BlcmF0b3JOYW1lVGVtcGxhdGV9IGluIHByb2Nlc3NlZCBmb3JtIGZpdCBmb3IgR1VJIHJlbmRlcmluZ1xuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgb3BlcmF0b3JUZW1wbGF0ZSQoKTogT2JzZXJ2YWJsZTxBcnJheTxPcGVyYXRvclRlbXBsYXRlUGFydD4gfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29wZXJhdG9yVGVtcGxhdGUkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEByZXR1cm5zIHdoZXRoZXIgdGhlIGNhdGVnb3J5IGlzIGZ1bGx5IGNvbmZpZ3VyZWQgYW5kIHJlcHJlc2VudHMgYSB2YWxpZCBwcmVkaWNhdGUgb3Igbm90XG4gICAgICovXG4gICAgcHVibGljIGdldCBwcm92aWRlc1ByZWRpY2F0ZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fZ2VuZXJhdGVkUHJlZGljYXRlJC5nZXRWYWx1ZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEByZXR1cm5zIHRoZSBzZXQgb2YgRWxhc3RpY3NlYXJjaCBrZXl3b3JkcyB0aGF0IHNob3VsZCBiZSBxdWVyaWVkIGJ5IHF1ZXJpZXMgZ2VuZXJhdGVkIHdpdGggdGhpcyBjYXRlZ29yeS5cbiAgICAgKiBUaGUgbWV0aG9kIGNhbiBiZSBvdmVycmlkZGVuIGlmIHRoZSBrZXl3b3JkcyBhcmUgbm90IHN0YXRpYyBhbmQgY2hhbmdlIGJhc2VkIG9uIHNvbWUgYWRkaXRpb25hbCBzZWxlY3Rpb24gKGVnLiBEYXRhIGZpZWxkcylcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgZ2V0IGVsYXN0aWNLZXl3b3JkcygpOiBBcnJheTxzdHJpbmc+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgICAgIHJlc3VsdC5wdXNoKC4uLnRoaXMuX2VsYXN0aWNLZXl3b3Jkcyk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHJldHVybnMgdGhlIGFyaXR5IG9mIHRoZSBzZWxlY3RlZCBvcGVyYXRvci4gVGhyb3dzIGFuIGVycm9yIGlmIG5vIG9wZXJhdG9yIGlzIHNlbGVjdGVkLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBnZXQgc2VsZWN0ZWRPcGVyYXRvckFyaXR5KCk6IG51bWJlciB7XG4gICAgICAgIGlmICghdGhpcy5pc09wZXJhdG9yU2VsZWN0ZWQoKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBbiBvcGVyYXRvciBtdXMgYmUgc2VsZWN0ZWQgYmVmb3JlIGl0cyBhcml0eSBjYW4gYmUgcmVzb2x2ZWQhJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRPcGVyYXRvci5udW1iZXJPZk9wZXJhbmRzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoYW5nZXMgdGhlIHN0YXRlIG9mIHRoZSBDYXRlZ29yeS4gQ2F0ZWdvcnkgY2FuIGNyZWF0ZSBxdWVyaWVzIHdoZW4gYW4ge0BsaW5rIE9wZXJhdG9yfSBpcyBzZWxlY3RlZC5cbiAgICAgKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIHVzZWZ1bCBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIENhdGVnb3J5IGNsYXNzIGFzIHByZWRpY2F0ZSBidWlsZGVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wZXJhdG9ySW5kZXggaW5kZXggaW4gdGhlIFthbGxvd2VkT3BlcmF0b3JzXXtAbGluayBDYXRlZ29yeSNhbGxvd2VkT3BlcmF0b3JzfSBhcnJheSBvZiB0aGUge0BsaW5rIE9wZXJhdG9yfSB0aGF0XG4gICAgICogc2hvdWxkIGJlIHNlbGVjdGVkXG4gICAgICovXG4gICAgcHVibGljIHNlbGVjdE9wZXJhdG9yKG9wZXJhdG9ySW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBvcGVyYXRvcnMgPSB0aGlzLmFsbG93ZWRPcGVyYXRvcnM7XG4gICAgICAgIGlmIChvcGVyYXRvckluZGV4IDwgMCB8fCBvcGVyYXRvckluZGV4ID49IG9wZXJhdG9ycy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuX2xvZy53YXJuKGBUaGUgcHJvdmlkZWQgJ29wZXJhdG9ySW5kZXgnIGlzIG91dCBvZiByYW5nZS5gKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9vcGVyYXRvckZvcm1Db250cm9sLnNldFZhbHVlKG9wZXJhdG9yc1tvcGVyYXRvckluZGV4XSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hhbmdlcyB0aGUgc3RhdGUgb2YgdGhlIENhdGVnb3J5IGFuZCBnZW5lcmF0ZXMgYSBxdWVyeSBpZiBhbGwgbmVjZXNzYXJ5IG9wZXJhbmRzIHdlcmUgc2V0LlxuICAgICAqXG4gICAgICogSWYgeW91IGFyZSB1c2luZyB0aGUgY2F0ZWdvcnkgYXMgYSBidWlsZGVyLiBDb25zaWRlciB1c2luZyB0aGUgW2dlbmVyYXRlUHJlZGljYXRlKClde0BsaW5rIENhdGVnb3J5I2dlbmVyYXRlUHJlZGljYXRlfVxuICAgICAqIG1ldGhvZCBpbnN0ZWFkLlxuICAgICAqXG4gICAgICogQHBhcmFtIHVzZXJJbnB1dCB2YWx1ZXMgZW50ZXJlZCBieSB0aGUgdXNlci4gVGhlIGxlbmd0aCBvZiB0aGUgYXJyYXkgc2hvdWxkIG1hdGNoIHRoZVxuICAgICAqIFthcml0eV17QGxpbmsgT3BlcmF0b3IjX251bWJlck9mT3BlcmFuZHN9IG9mIHRoZSBzZWxlY3RlZCBPcGVyYXRvci5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0T3BlcmFuZHModXNlcklucHV0OiBBcnJheTxUPik6IHZvaWQge1xuICAgICAgICBjb25zdCByYW5nZSA9IE1hdGgubWluKHVzZXJJbnB1dC5sZW5ndGgsIHRoaXMuX29wZXJhbmRzRm9ybUNvbnRyb2xzLmxlbmd0aCk7XG4gICAgICAgIGlmIChyYW5nZSA8IHVzZXJJbnB1dC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuX2xvZy53YXJuKGAke3VzZXJJbnB1dC5sZW5ndGh9IG9wZXJhbmRzIGFyZSBiZWluZyBzZXQsIGJ1dCBvbmx5ICR7cmFuZ2V9IGlucHV0cyBhcmUgYXZhaWxhYmxlIWBcbiAgICAgICAgICAgICAgICArICcgRXh0cmEgb3BlcmFuZHMgd2lsbCBiZSBpZ25vcmVkLicpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmFuZ2U7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5fb3BlcmFuZHNGb3JtQ29udHJvbHNbaV0uc2V0VmFsdWUodXNlcklucHV0W2ldKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmFuZ2UgIT09IDApIHtcbiAgICAgICAgICAgIHRoaXMub3BlcmFuZFZhbHVlQ2hhbmdlcyhyYW5nZSAtIDEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVzZXRzIHRoZSBzdGF0ZSBvZiB0aGUgQ2F0ZWdvcnksIGRlc2VsZWN0aW5nIGFueSBzZWxlY3RlZCBjYXRlZ29yeSBhbmQgcmVtb3Zpbmcgb3RoZXIgc3RhdGVcbiAgICAgKiBpbmZvcm1hdGlvbiBpZiB0aGUgQ2F0ZWdvcnkgZGVmaW5lcyB0aGVtLlxuICAgICAqXG4gICAgICogVGhpcyBtZXRob2QgY2FuIGJlIHVzZWQgdG8gcmVzZXQgdGhlIHN0YXRlIG9mIHRoZSBjYXRlZ29yeSBhZnRlciBlYWNoIHByZWRpY2F0ZSBjb25zdHJ1Y3RlZCxcbiAgICAgKiBlZmZlY3RpdmVseSB0dXJuaW5nIHRoZSBjYXRlZ29yeSBpbnN0YW5jZSBpbnRvIGEgcHJlZGljYXRlIGJ1aWxkZXIuXG4gICAgICovXG4gICAgcHVibGljIHJlc2V0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNsZWFyT3BlcmF0b3JTZWxlY3Rpb24oKTtcbiAgICAgICAgdGhpcy5fb3BlcmFuZHNGb3JtQ29udHJvbHMuZm9yRWFjaChmYyA9PiB7XG4gICAgICAgICAgICBmYy5zZXRWYWx1ZSh1bmRlZmluZWQpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYWxscyB0aGUgW2NyZWF0ZVF1ZXJ5XXtAbGluayBPcGVyYXRvciNjcmVhdGVRdWVyeX0gbWV0aG9kIG9uIHRoZSBzZWxlY3RlZCBPcGVyYXRvci5cbiAgICAgKlxuICAgICAqIFRocm93cyBhbiBFcnJvciBpZiBubyBPcGVyYXRvciBpcyBzZWxlY3RlZC5cbiAgICAgKlxuICAgICAqIE92ZXJyaWRlIHRoaXMgbWV0aG9kIGlmIHRoZSBxdWVyeSBzaG91bGQgYmUgZ2VuZXJhdGVkIGluIHNvbWUgb3RoZXIgd2F5LlxuICAgICAqIEBwYXJhbSB1c2VySW5wdXQgdmFsdWVzIGVudGVyZWQgYnkgdGhlIHVzZXIuIFRoZSBsZW5ndGggb2YgdGhlIGFycmF5IHNob3VsZCBtYXRjaCB0aGVcbiAgICAgKiBbYXJpdHlde0BsaW5rIE9wZXJhdG9yI19udW1iZXJPZk9wZXJhbmRzfSBvZiB0aGUgc2VsZWN0ZWQgT3BlcmF0b3IuXG4gICAgICogQHJldHVybnMgdGhlIFF1ZXJ5IGdlbmVyYXRlZCBieSB0aGUgc2VsZWN0ZWQgT3BlcmF0b3JcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgZ2VuZXJhdGVRdWVyeSh1c2VySW5wdXQ6IEFycmF5PFQ+KTogUXVlcnkge1xuICAgICAgICBpZiAoIXRoaXMuaXNPcGVyYXRvclNlbGVjdGVkKCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2F0ZWdvcnkgY2Fubm90IGdlbmVyYXRlIGEgUXVlcnkgaWYgbm8gT3BlcmF0b3IgaXMgc2VsZWN0ZWQnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fb3BlcmF0b3JGb3JtQ29udHJvbC52YWx1ZS5jcmVhdGVRdWVyeSh0aGlzLl9lbGFzdGljS2V5d29yZHMsIHVzZXJJbnB1dCBhcyB1bmtub3duIGFzIEFycmF5PHN0cmluZz4pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhbGxzIHRoZSBbZ2VuZXJhdGVRdWVyeV17QGxpbmsgQ2F0ZWdvcnkjZ2VuZXJhdGVRdWVyeX0gbWV0aG9kIGFuZCBjcmVhdGVzIGFuIHtAbGluayBFbGVtZW50YXJ5UHJlZGljYXRlfSB3aXRoIHRoZSByZXN1bHQuXG4gICAgICogQHBhcmFtIHVzZXJJbnB1dCB2YWx1ZXMgZW50ZXJlZCBieSB0aGUgdXNlci4gVGhlIGxlbmd0aCBvZiB0aGUgYXJyYXkgc2hvdWxkIG1hdGNoIHRoZVxuICAgICAqIFthcml0eV17QGxpbmsgT3BlcmF0b3IjX251bWJlck9mT3BlcmFuZHN9IG9mIHRoZSBzZWxlY3RlZCBPcGVyYXRvci5cbiAgICAgKiBAcmV0dXJucyBQcmVkaWNhdGUgd2l0aCB7QGxpbmsgUXVlcnl9IGdlbmVyYXRlZCBieSB0aGlzIG9iamVjdCdzIFtnZW5lcmF0ZVF1ZXJ5XXtAbGluayBDYXRlZ29yeSNnZW5lcmF0ZVF1ZXJ5fSBtZXRob2RcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2VuZXJhdGVQcmVkaWNhdGUodXNlcklucHV0OiBBcnJheTxUPik6IEVsZW1lbnRhcnlQcmVkaWNhdGUge1xuICAgICAgICByZXR1cm4gbmV3IEVsZW1lbnRhcnlQcmVkaWNhdGUodGhpcy5nZW5lcmF0ZVF1ZXJ5KHVzZXJJbnB1dCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlbGVjdHMgdGhlIGRlZmF1bHQgb3BlcmF0b3IgdGhhdCBzaG91bGQgYmUgdXNlZCBmb3IgcXVlcnkgZ2VuZXJhdGlvbiwgd2hlbiBubyBPcGVyYXRvciBzZWxlY3Rpb24gaXMgcHJvdmlkZWQgdG8gdGhlIHVzZXIuXG4gICAgICpcbiAgICAgKiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBzZWxlY3RzIHRoZSBmaXJzdCBvcGVyYXRvciBpbiB0aGUgW19hbGxvd2VkT3BlcmF0b3JzXXtAbGluayBDYXRlZ29yeSNhbGxvd2VkT3BlcmF0b3JzfSBhcnJheS5cbiAgICAgKlxuICAgICAqIFNlZSBbc2VsZWN0T3BlcmF0b3IoKV17QGxpbmsgQ2F0ZWdvcnkjc2VsZWN0T3BlcmF0b3J9IGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICAgICAqL1xuICAgIHB1YmxpYyBzZWxlY3REZWZhdWx0T3BlcmF0b3IoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VsZWN0T3BlcmF0b3IoMCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHJldHVybnMgdGhlIHRyYW5zbGF0aW9uIHN0cmluZyBwYXRoIGZvciB0aGUgdGV4dCB0aGF0IHNob3VsZCBiZSBkaXNwbGF5ZWQgaW4gdGhlIGlucHV0IHBsYWNlaG9sZGVyXG4gICAgICovXG4gICAgcHVibGljIGFic3RyYWN0IGdldCBpbnB1dFBsYWNlaG9sZGVyKCk6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEByZXR1cm5zIHdoZXRoZXIgdGhlIGNhdGVnb3J5IHRleHQgc2hvdWxkIGJlIHJlbmRlcmVkIHdpdGggYm9sZCB0ZXh0IHdoZW4gc2VsZWN0ZWRcbiAgICAgKi9cbiAgICBwdWJsaWMgYWJzdHJhY3QgZ2V0IGRpc3BsYXlCb2xkKCk6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyB3aGV0aGVyIGFuIG9wZXJhdG9yIGlzIGN1cnJlbnRseSBzZWxlY3RlZCBvciBub3QuXG4gICAgICovXG4gICAgcHVibGljIGlzT3BlcmF0b3JTZWxlY3RlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fb3BlcmF0b3JGb3JtQ29udHJvbC52YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZXNlbGVjdHMgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBvcGVyYXRvciAoaWYgYW55KVxuICAgICAqL1xuICAgIHB1YmxpYyBjbGVhck9wZXJhdG9yU2VsZWN0aW9uKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9vcGVyYXRvckZvcm1Db250cm9sLnNldFZhbHVlKHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGR1cGxpY2F0ZSBvZiB0aGUgY3VycmVudCBjYXRlZ29yeSBvYmplY3QuIE5vdGUgdGhhdCBhIGR1cGxpY2F0ZSBpcyBOT1QgYSBjbG9uZS5cbiAgICAgKiBUaGUgc3RhdGUgb2YgdGhlIHJldHVybmVkIGNhdGVnb3J5IGlzIG5vdCBuZWNlc3NhcmlseSB0aGUgc2FtZSBhcyB0aGUgc3RhdGUgb2YgdGhpcyBjYXRlZ29yeS5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIGEgY2F0ZWdvcnkgaW5zdGFuY2Ugb2YgdGhlIHNhbWUgdHlwZSBhcyB0aGlzIGNhdGVnb3J5IGluIGl0cyBpbml0aWFsIHN0YXRlLlxuICAgICAqL1xuICAgIHB1YmxpYyBhYnN0cmFjdCBkdXBsaWNhdGUoKTogQ2F0ZWdvcnk8VD47XG5cbiAgICAvKipcbiAgICAgKiBQcm92aWRlcyB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIGZvciB0aGUgc2VyaWFsaXNhdGlvbiBvZiB0aGlzIGNhdGVnb3J5J3Mgc3RhdGUuXG4gICAgICpcbiAgICAgKiBOb3QgZXZlcnkgc3RhdGUgbXVzdCBiZSBwcmVzZXJ2YWJsZS4gVGhlIGRlZmF1bHQgbGlicmFyeSBpbXBsZW1lbnRhdGlvbiBzdXBwb3J0cyBvbmx5IHRoZSBwcmVzZXJ2YXRpb24gb2YgdGhlIGZpbmFsIHN0YXRlIHdoZW4gdGhlXG4gICAgICogQ2F0ZWdvcnkgaXMgZ2VuZXJhdGluZyBhIHByZWRpY2F0ZSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiBmb3IgdGhlIHJlY29uc3RydWN0aW9uIG9mIHRoaXMgY2F0ZWdvcnkncyBzdGF0ZSxcbiAgICAgKiBiYXJyaW5nIGluZm9ybWF0aW9uIGFib3V0IGFsbG93ZWQgbmV0cy4gUmV0dXJucyBgdW5kZWZpbmVkYCBpZiB0aGUgY2F0ZWdvcnkgaXMgbm90IGluIGEgc3RhdGUgdGhhdCBnZW5lcmF0ZXMgYSBwcmVkaWNhdGUuXG4gICAgICogU2VlIFtwcm92aWRlc1ByZWRpY2F0ZSgpXXtAbGluayBDYXRlZ29yeSNwcm92aWRlc1ByZWRpY2F0ZX0uXG4gICAgICovXG4gICAgcHVibGljIGNyZWF0ZU1ldGFkYXRhKCk6IENhdGVnb3J5R2VuZXJhdG9yTWV0YWRhdGEgfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAoIXRoaXMucHJvdmlkZXNQcmVkaWNhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNhdGVnb3J5OiB0aGlzLnNlcmlhbGl6ZUNsYXNzKCksXG4gICAgICAgICAgICBjb25maWd1cmF0aW9uOiB0aGlzLmNyZWF0ZU1ldGFkYXRhQ29uZmlndXJhdGlvbigpLFxuICAgICAgICAgICAgdmFsdWVzOiB0aGlzLmNyZWF0ZU1ldGFkYXRhVmFsdWVzKClcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXN0b3JlcyB0aGUgc2F2ZWQgc3RhdGUgY29udGFpbmVkIGluIHRoZSBwcm92aWRlZCBtZXRhZGF0YS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBtZXRhZGF0YSB0aGUgbWV0YWRhdGEgY3JlYXRlZCBieSBjYWxsaW5nIHRoZSBbY3JlYXRlTWV0YWRhdGEoKV17QGxpbmsgQ2F0ZWdvcnkjY3JlYXRlTWV0YWRhdGF9IG1ldGhvZFxuICAgICAqXG4gICAgICogQHJldHVybnMgYW4gT2JzZXJ2YWJsZS4gV2hlbiB0aGUgT2JzZXJ2YWJsZSBlbWl0cyB0aGUgY2F0ZWdvcnkgaGFzIGZpbmlzaGVkIHJlc3RvcmluZyBpdHMgc3RhdGUuXG4gICAgICovXG4gICAgcHVibGljIGxvYWRGcm9tTWV0YWRhdGEobWV0YWRhdGE6IENhdGVnb3J5R2VuZXJhdG9yTWV0YWRhdGEpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0JCA9IG5ldyBSZXBsYXlTdWJqZWN0PHZvaWQ+KDEpO1xuICAgICAgICB0aGlzLmxvYWRDb25maWd1cmF0aW9uRnJvbU1ldGFkYXRhKG1ldGFkYXRhLmNvbmZpZ3VyYXRpb24pLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmxvYWRWYWx1ZXNGcm9tTWV0YWRhdGEobWV0YWRhdGEudmFsdWVzKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJlc3VsdCQubmV4dCgpO1xuICAgICAgICAgICAgICAgIHJlc3VsdCQuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdCQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGUgaW4gdGhlIGNvbnN0cnVjdG9yLiBBcGFydCBmcm9tIGNhbGxpbmcgdGhpcyBtZXRob2QsIHRoZSBjb25zdHJ1Y3RvciBvbmx5IGNyZWF0ZXMgaW5zdGFuY2VzIHRvIGZpbGwgdGhlIHByb3RlY3RlZFxuICAgICAqIGZpZWxkcyBvZiB0aGlzIGNsYXNzLlxuICAgICAqXG4gICAgICogVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gbWFuYWdlcyBjcmVhdGlvbiBvZiBvcGVyYW5kIGBGb3JtQ29udHJvbGAgaW5zdGFuY2VzIGFuZCBtYW5hZ2VzIHN1YnNjcmlwdGlvbnMgdG8gdGhlbS5cbiAgICAgKlxuICAgICAqIFlvdSBjYW4gb3ZlcnJpZGUgdGhpcyBtZXRob2QgdG8gY2hhbmdlIHRoZSBpbml0aWFsaXphdGlvbiBvZiB5b3VyIGNhdGVnb3J5IHdpdGhvdXQgaGF2aW5nIHRvIHJld3JpdGUgdGhlIGJhc2VcbiAgICAgKiBjb25zdHJ1Y3RvciBmcm9tIHNjcmF0Y2guXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGluaXRpYWxpemVDYXRlZ29yeSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fb3BlcmF0b3JGb3JtQ29udHJvbC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKChuZXdPcGVyYXRvcjogT3BlcmF0b3I8YW55PikgPT4ge1xuICAgICAgICAgICAgdGhpcy5fb3BlcmFuZHNGb3JtQ29udHJvbHMuZm9yRWFjaChmYyA9PiB7XG4gICAgICAgICAgICAgICAgZmMuc2V0VmFsdWUodW5kZWZpbmVkKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAoIW5ld09wZXJhdG9yKSB7XG4gICAgICAgICAgICAgICAgLy8gdW5kZWZpbmVkIGlzIG5leHQtZWQgaW50byB0aGUgc3RyZWFtLiBNYXJrZWQgYXMgY29kZSBzbWVsbCBieSBzb25hciB3aGVuIGV4cGxpY2l0bHkgc3RhdGVkXG4gICAgICAgICAgICAgICAgdGhpcy5fb3BlcmFuZHNGb3JtQ29udHJvbHMkLm5leHQoKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fb3BlcmFuZHNGb3JtQ29udHJvbHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2dlbmVyYXRlZFByZWRpY2F0ZSQubmV4dCh1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChuZXdPcGVyYXRvci5udW1iZXJPZk9wZXJhbmRzID4gdGhpcy5fb3BlcmFuZHNGb3JtQ29udHJvbHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgd2hpbGUgKHRoaXMuX29wZXJhbmRzRm9ybUNvbnRyb2xzLmxlbmd0aCA8IG5ld09wZXJhdG9yLm51bWJlck9mT3BlcmFuZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmMgPSBuZXcgRm9ybUNvbnRyb2woKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudExlbmd0aCA9IHRoaXMuX29wZXJhbmRzRm9ybUNvbnRyb2xzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgZmMudmFsdWVDaGFuZ2VzLnBpcGUoZGVib3VuY2VUaW1lKDYwMCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZXJhbmRWYWx1ZUNoYW5nZXMoY3VycmVudExlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9vcGVyYW5kc0Zvcm1Db250cm9scy5wdXNoKGZjKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX29wZXJhbmRzRm9ybUNvbnRyb2xzJC5uZXh0KHRoaXMuX29wZXJhbmRzRm9ybUNvbnRyb2xzLnNsaWNlKDAsIG5ld09wZXJhdG9yLm51bWJlck9mT3BlcmFuZHMpKTtcblxuICAgICAgICAgICAgaWYgKG5ld09wZXJhdG9yLm51bWJlck9mT3BlcmFuZHMgPT09IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9nZW5lcmF0ZWRQcmVkaWNhdGUkLm5leHQodGhpcy5nZW5lcmF0ZVByZWRpY2F0ZShbXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWV0aG9kIHRoYXQgaXMgKGJ5IGRlZmF1bHQpIGNhbGxlZCB3aGVuZXZlciBhbiBvcGVyYW5kIGBGb3JtQ29udHJvbGAgY2hhbmdlcyBpdHMgdmFsdWUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3BlcmFuZEluZGV4IHRoZSBpbmRleCBvZiB0aGUgb3BlcmFuZCB0aGF0IGNoYW5nZWQgaXRzIHZhbHVlXG4gICAgICovXG4gICAgcHJvdGVjdGVkIG9wZXJhbmRWYWx1ZUNoYW5nZXMob3BlcmFuZEluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzT3BlcmF0b3JTZWxlY3RlZCgpKSB7XG4gICAgICAgICAgICB0aGlzLl9nZW5lcmF0ZWRQcmVkaWNhdGUkLm5leHQodW5kZWZpbmVkKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3BlcmFuZEluZGV4ID49IHRoaXMuc2VsZWN0ZWRPcGVyYXRvckFyaXR5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc2VsZWN0ZWRPcGVyYXRvckFyaXR5OyBpKyspIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5pc09wZXJhbmRWYWx1ZVNlbGVjdGVkKHRoaXMuX29wZXJhbmRzRm9ybUNvbnRyb2xzW2ldLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9nZW5lcmF0ZWRQcmVkaWNhdGUkLmdldFZhbHVlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZ2VuZXJhdGVkUHJlZGljYXRlJC5uZXh0KHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2dlbmVyYXRlZFByZWRpY2F0ZSQubmV4dCh0aGlzLmdlbmVyYXRlUHJlZGljYXRlKHRoaXMuX29wZXJhbmRzRm9ybUNvbnRyb2xzLm1hcChmYyA9PiB0aGlzLnRyYW5zZm9ybUNhdGVnb3J5VmFsdWUoZmMudmFsdWUpKSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEByZXR1cm5zIHRoZSBjYXRlZ29yeSBjbGFzcyBpbiBhIHNlcmlhbGl6YWJsZSBmb3JtXG4gICAgICpcbiAgICAgKiBAZGVwcmVjYXRlZCBpbiA1LjYuMCAtIENhdGVnb3J5IHNlcmlhbGlzYXRpb24gc2hvdWxkIGJlIGRvbmUgYnkgdXRpbGlzaW5nIHRoZSB7QGxpbmsgQ2F0ZWdvcnlSZXNvbHZlclNlcnZpY2V9IGluc3RlYWRcbiAgICAgKi9cbiAgICBhYnN0cmFjdCBzZXJpYWxpemVDbGFzcygpOiBDYXRlZ29yaWVzIHwgc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gc2VyaWFsaXplcyBvbmx5IHRoZSBvcGVyYXRvci5cbiAgICAgKiBJZiB0aGUgY2F0ZWdvcnkgY29udGFpbnMgYWRkaXRpb25hbCBjb25maWd1cmF0aW9uLCB0aGlzIG1ldGhvZCBtdXN0IGJlIGV4dGVuZGVkLlxuICAgICAqXG4gICAgICogQHJldHVybnMgYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24gZm9yIHRoZSByZWNvbnN0cnVjdGlvbiBvZiB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGlzIGNhdGVnb3J5IGluc3RhbmNlXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGNyZWF0ZU1ldGFkYXRhQ29uZmlndXJhdGlvbigpOiBDYXRlZ29yeU1ldGFkYXRhQ29uZmlndXJhdGlvbiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBbQ2F0ZWdvcnkuT1BFUkFUT1JfTUVUQURBVEFdOiB0aGlzLnNlbGVjdGVkT3BlcmF0b3Iuc2VyaWFsaXplKClcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIHRoZSB2YWx1ZSBvZiBhbGwgb3BlcmFuZCBmb3JtIGNvbnRyb2wgb2JqZWN0cyB1cCB0byB0aGUgY3VycmVudCBudW1iZXIgb2Ygb3BlcmFuZHMuXG4gICAgICogVG8gc2VyaWFsaXplIHZhbHVlIG9mIGVhY2ggb3BlcmFuZCB0aGUgW3NlcmlhbGl6ZU9wZXJhbmRWYWx1ZSgpXXtAbGluayBDYXRlZ29yeSNzZXJpYWxpemVPcGVyYW5kVmFsdWV9IG1ldGhvZCBpcyB1c2VkLlxuICAgICAqXG4gICAgICogSWYgdGhlIHZhbHVlcyB1c2VkIGJ5IHRoaXMgY2F0ZWdvcnkgYXJlIG5vdCBzZXJpYWxpemFibGUsIHRoZW4gZWl0aGVyIHRoaXMgbWV0aG9kLCBvciB0aGUgYHNlcmlhbGl6ZU9wZXJhbmRWYWx1ZWAgbWV0aG9kLFxuICAgICAqIG11c3QgYmUgb3ZlcnJpZGRlbi5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIGFuIGFycmF5IGNvbnRhaW5pbmcgdmFsdWVzIGlucHV0IGJ5IHRoZSB1c2VyIGluIGEgc2VyaWFsaXphYmxlIGZvcm1cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgY3JlYXRlTWV0YWRhdGFWYWx1ZXMoKTogQXJyYXk8dW5rbm93bj4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnNlbGVjdGVkT3BlcmF0b3JBcml0eTsgaSsrKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaCh0aGlzLnNlcmlhbGl6ZU9wZXJhbmRWYWx1ZSh0aGlzLl9vcGVyYW5kc0Zvcm1Db250cm9sc1tpXSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHZhbHVlRm9ybUNvbnRyb2wgRm9ybUNvbnRyb2wgb2JqZWN0IG9mIG9uZSBvcGVyYW5kXG4gICAgICogQHJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBvcGVyYW5kIGluIGEgc2VyaWFsaXplZCBmb3JtLiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIHRoZSBGb3JtQ29udHJvbHMgYHZhbHVlYCBhdHRyaWJ1dGUuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHNlcmlhbGl6ZU9wZXJhbmRWYWx1ZSh2YWx1ZUZvcm1Db250cm9sOiBGb3JtQ29udHJvbCk6IHVua25vd24ge1xuICAgICAgICByZXR1cm4gdmFsdWVGb3JtQ29udHJvbC52YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXN0b3JlZCB0aGUgc2F2ZWQgY29uZmlndXJhdGlvbiBmcm9tIHRoZSBtZXRhZGF0YSBjcmVhdGVkIGJ5IHRoZVxuICAgICAqIFtjcmVhdGVNZXRhZGF0YUNvbmZpZ3VyYXRpb24oKV17QGxpbmsgQ2F0ZWdvcnkjY3JlYXRlTWV0YWRhdGFDb25maWd1cmF0aW9ufSBtZXRob2QuXG4gICAgICpcbiAgICAgKiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXN0b3JlcyBvbmx5IHRoZSBzYXZlZCBvcGVyYXRvci5cbiAgICAgKlxuICAgICAqIElmIHRoZSBDYXRlZ29yeSBvdmVycmlkZXMgdGhlIHNlcmlhbGl6YXRpb24gbWV0aG9kLCBpdCBtdXN0IG92ZXJyaWRlIHRoaXMgbWV0aG9kIGFzIHdlbGwuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY29uZmlndXJhdGlvbiB0aGUgc2VyaWFsaXplZCBjb25maWd1cmF0aW9uXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBhbiBPYnNlcnZhYmxlLiBXaGVuIHRoZSBPYnNlcnZhYmxlIGVtaXRzIHRoZSBjYXRlZ29yeSBoYXMgZmluaXNoZWQgbG9hZGluZyBpdHMgY29uZmlndXJhdGlvbi5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgbG9hZENvbmZpZ3VyYXRpb25Gcm9tTWV0YWRhdGEoY29uZmlndXJhdGlvbjogQ2F0ZWdvcnlNZXRhZGF0YUNvbmZpZ3VyYXRpb24pOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgcmVzb2x2ZWRPcGVyYXRvciA9IHRoaXMuX29wZXJhdG9yU2VydmljZS5nZXRGcm9tTWV0YWRhdGEoY29uZmlndXJhdGlvbltDYXRlZ29yeS5PUEVSQVRPUl9NRVRBREFUQV0gYXMgT3BlcmF0b3JzIHwgc3RyaW5nKTtcbiAgICAgICAgdGhpcy5zZWxlY3RPcGVyYXRvcih0aGlzLmFsbG93ZWRPcGVyYXRvcnMuZmluZEluZGV4KG9wID0+IG9wID09PSByZXNvbHZlZE9wZXJhdG9yKSk7XG4gICAgICAgIHJldHVybiBvZlZvaWQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBzZXRzIHRoZSBwcm92aWRlZCB2YWx1ZXMgaW50byB0aGlzIENhdGVnb3J5J3Mgb3BlcmFuZCBmb3JtIGNvbnRyb2xzLlxuICAgICAqXG4gICAgICogQW4gb3BlcmF0b3IgbXVzdCBiZSBzZXQgYmVmb3JlIGNhbGxpbmcgdGhpcyBtZXRob2QhIE90aGVyd2lzZSBhbiBlcnJvciB3aWxsIGJlIHRocm93bi5cbiAgICAgKlxuICAgICAqIElmIHRoZSBudW1iZXIgb2YgdmFsdWVzIGRvZXNuJ3QgbWF0Y2ggdGhlIGFyaXR5IG9mIHRoZSBzZWxlY3RlZCBvcGVyYXRvciBhbiBlcnJvciB3aWxsIGJlIHRocm93biFcbiAgICAgKlxuICAgICAqIElmIHRoaXMgQ2F0ZWdvcnkgb3ZlcnJpZGVzIHRoZSBbc2VyaWFsaXplT3BlcmFuZFZhbHVlKClde0BsaW5rIENhdGVnb3J5I3NlcmlhbGl6ZU9wZXJhbmRWYWx1ZX0sIGl0IG11c3QgYWxzb1xuICAgICAqIG92ZXJyaWRlIGl0cyBkZXNlcmlhbGl6YXRpb24gY291bnRlcnBhcnQgLSBbZGVzZXJpYWxpemVPcGVyYW5kVmFsdWUoKV17QGxpbmsgI0NhdGVnb3J5I2Rlc2VyaWFsaXplT3BlcmFuZFZhbHVlfSFcbiAgICAgKlxuICAgICAqIEBwYXJhbSB2YWx1ZXMgdGhlIHNlcmlhbGl6ZWQgdmFsdWVzIHRoYXQgc2hvdWxkIGJlIGxvYWRlZCBpbnRvIHRoaXMgQ2F0ZWdvcnkgaW5zdGFuY2VcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIGFuIE9ic2VydmFibGUuIFdoZW4gdGhlIE9ic2VydmFibGUgZW1pdHMgdGhlIGNhdGVnb3J5IGhhcyBmaW5pc2hlZCBsb2FkaW5nIGl0cyB2YWx1ZXMuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGxvYWRWYWx1ZXNGcm9tTWV0YWRhdGEodmFsdWVzOiBBcnJheTx1bmtub3duPik6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgICAgICBpZiAoIXRoaXMuaXNPcGVyYXRvclNlbGVjdGVkKCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQW4gb3BlcmF0b3IgbXVzdCBiZSBzZWxlY3RlZCBiZWZvcmUgQ2F0ZWdvcnkgdmFsdWVzIGNhbiBiZSByZXNvbHZlZCBmcm9tIG1ldGFkYXRhIScpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkT3BlcmF0b3JBcml0eSAhPT0gdmFsdWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgYXJpdHkgb2YgdGhlIHNlbGVjdGVkIG9wZXJhdG9yICgke3RoaXMuc2VsZWN0ZWRPcGVyYXRvckFyaXR5XG4gICAgICAgICAgICB9KSBkb2Vzbid0IG1hdGNoIHRoZSBudW1iZXIgb2YgdGhlIHByb3ZpZGVkIHZhbHVlcyAoJHt2YWx1ZXMubGVuZ3RofSkhYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGVzZXJpYWxpemVkVmFsdWVzT2JzZXJ2YWJsZXMgPSB2YWx1ZXMubWFwKHYgPT4gdGhpcy5kZXNlcmlhbGl6ZU9wZXJhbmRWYWx1ZSh2KSk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCQgPSBuZXcgUmVwbGF5U3ViamVjdDx2b2lkPigxKTtcbiAgICAgICAgZm9ya0pvaW4oZGVzZXJpYWxpemVkVmFsdWVzT2JzZXJ2YWJsZXMpLnBpcGUoZGVmYXVsdElmRW1wdHkoW10pKS5zdWJzY3JpYmUoZGVzZXJpYWxpemVkVmFsdWVzID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0T3BlcmFuZHMoZGVzZXJpYWxpemVkVmFsdWVzKTtcbiAgICAgICAgICAgIHJlc3VsdCQubmV4dCgpO1xuICAgICAgICAgICAgcmVzdWx0JC5jb21wbGV0ZSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdCQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHZhbHVlIHRoZSBzZXJpYWxpemVkIG91dHB1dCBvZiB0aGUgW3NlcmlhbGl6ZU9wZXJhbmRWYWx1ZSgpXXtAbGluayBDYXRlZ29yeSNzZXJpYWxpemVPcGVyYW5kVmFsdWV9IG1ldGhvZFxuICAgICAqIEByZXR1cm5zIGFuIGBPYnNlcnZhYmxlYCB0aGF0IGVtaXRzIHRoZSBkZXNlcmlhbGl6ZWQgdmFsdWUsIHRoYXQgY2FuIGJlIHNldCBhcyBGb3JtQ29udHJvbCB2YWx1ZSBhbmQgdGhlbiBjb21wbGV0ZXNcbiAgICAgKlxuICAgICAqIFRoaXMgbWV0aG9kIG1heSB0aHJvdyBuYSBlcnJvciBpZiB0aGUgdmFsdWUgY2Fubm90IGJlIGRlc2VyaWFsaXplZC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgZGVzZXJpYWxpemVPcGVyYW5kVmFsdWUodmFsdWU6IHVua25vd24pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICByZXR1cm4gb2YodmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSBuZXdWYWx1ZSB0aGUgdmFsdWUgb2YgdGhlIGBGb3JtQ29udHJvbGAgb2JqZWN0IHRoYXQgd2Ugd2FudCB0byB0ZXN0XG4gICAgICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBuZXdseSBzZWxlY3RlZCB2YWx1ZSBpcyBhIHZhbGlkIHZhbHVlLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgaXNPcGVyYW5kVmFsdWVTZWxlY3RlZChuZXdWYWx1ZTogYW55KTogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIFBlcmZvcm1zIGEgdHJhbnNmb3JtYXRpb24gb2YgdGhlIGBGb3JtQ29udHJvbGAgdmFsdWUgYmVmb3JlIHBhc3NpbmcgaXQgaW50byB0aGUgc2VsZWN0ZWQgYE9wZXJhdG9yYCBmb3IgcXVlcnkgZ2VuZXJhdGlvbi5cbiAgICAgKiBJdCBpcyBtb3N0bHkgdXNlZnVsIG9ubHkgZm9yIEF1dG9jb21wbGV0ZUNhdGVnb3JpZXMsIHdoZXJlIHRoZSBzZWxlY3RlZCB2YWx1ZSBvZiB0aGUgRm9ybUNvbnRyb2wgaXMgYW4gb2JqZWN0LlxuICAgICAqXG4gICAgICogVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcGVyZm9ybXMgYW4gaWRlbnRpdHkgdHJhbnNmb3JtYXRpb24gLSByZXR1cm5zIHRoZSBpbnB1dC5cbiAgICAgKiBAcGFyYW0gdmFsdWUgdGhlIEZvcm1Db250cm9sVmFsdWVcbiAgICAgKiBAcmV0dXJucyB0aGUgdmFsdWUgdXNlZCBmb3IgcXVlcnkgZ2VuZXJhdGlvblxuICAgICAqL1xuICAgIHByb3RlY3RlZCB0cmFuc2Zvcm1DYXRlZ29yeVZhbHVlKHZhbHVlOiBhbnkpOiBUIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEByZXR1cm5zIGFuIEFycmF5IGNvbnRhaW5pbmcgdGV4dCBzZWdtZW50cyByZXByZXNlbnRpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIHByZWRpY2F0ZSBnZW5lcmF0ZWQgYnkgdGhpcyBjYXRlZ29yeVxuICAgICAqL1xuICAgIHB1YmxpYyBjcmVhdGVGaWx0ZXJUZXh0U2VnbWVudHMoKTogQXJyYXk8RmlsdGVyVGV4dFNlZ21lbnQ+IHtcbiAgICAgICAgaWYgKCF0aGlzLnByb3ZpZGVzUHJlZGljYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHtzZWdtZW50OiB0aGlzLnRyYW5zbGF0aW9uUGF0aCwgYm9sZDogdGhpcy5kaXNwbGF5Qm9sZH0sXG4gICAgICAgICAgICAuLi50aGlzLmNyZWF0ZUNvbmZpZ3VyYXRpb25GaWx0ZXJUZXh0U2VnbWVudHMoKSxcbiAgICAgICAgICAgIC4uLnRoaXMuY3JlYXRlT3BlcmF0b3JGaWx0ZXJUZXh0U2VnbWVudHMoKVxuICAgICAgICBdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEByZXR1cm5zIGFuIEFycmF5IGNvbnRhaW5pbmcgdGV4dCBzZWdtZW50cyByZXByZXNlbnRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gaW5wdXRzIG9mIHRoaXMgY2F0ZWdvcnlcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgY3JlYXRlQ29uZmlndXJhdGlvbkZpbHRlclRleHRTZWdtZW50cygpOiBBcnJheTxGaWx0ZXJUZXh0U2VnbWVudD47XG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyBhbiBBcnJheSBjb250YWluaW5nIHRleHQgc2VnbWVudHMgcmVwcmVzZW50aW5nIHRoZSBvcGVyYXRvcnMgd2l0aCBvcGVyYW5kcyBvZiB0aGlzIGNhdGVnb3J5XG4gICAgICovXG4gICAgcHJvdGVjdGVkIGNyZWF0ZU9wZXJhdG9yRmlsdGVyVGV4dFNlZ21lbnRzKCk6IEFycmF5PEZpbHRlclRleHRTZWdtZW50PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdDogQXJyYXk8RmlsdGVyVGV4dFNlZ21lbnQ+ID0gW107XG4gICAgICAgIGxldCBvcGVyYW5kSW5kZXggPSAwO1xuICAgICAgICBmb3IgKGNvbnN0IHNlZ21lbnQgb2YgdGhpcy5zZWxlY3RlZE9wZXJhdG9yLmdldE9wZXJhdG9yTmFtZVRlbXBsYXRlKCkpIHtcbiAgICAgICAgICAgIGlmIChzZWdtZW50ID09PSBPcGVyYXRvci5JTlBVVF9QTEFDRUhPTERFUikge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRoaXMuY3JlYXRlT3BlcmFuZEZpbHRlclRleHRTZWdtZW50KG9wZXJhbmRJbmRleCkpO1xuICAgICAgICAgICAgICAgIG9wZXJhbmRJbmRleCsrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh7c2VnbWVudH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHJldHVybnMgZmlsdGVyIHRleHQgc2VnbWVudCByZXByZXNlbnRpbmcgdGhlIG9wZXJhbmQgdmFsdWUgYXQgdGhlIHNwZWNpZmllZCBpbmRleFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBjcmVhdGVPcGVyYW5kRmlsdGVyVGV4dFNlZ21lbnQob3BlcmFuZEluZGV4OiBudW1iZXIpOiBGaWx0ZXJUZXh0U2VnbWVudCB7XG4gICAgICAgIGxldCBzZWdtZW50O1xuICAgICAgICBjb25zdCBvcGVyYW5kID0gdGhpcy5fb3BlcmFuZHNGb3JtQ29udHJvbHNbb3BlcmFuZEluZGV4XS52YWx1ZTtcbiAgICAgICAgc3dpdGNoICh0aGlzLmlucHV0VHlwZSkge1xuICAgICAgICAgICAgY2FzZSBTZWFyY2hJbnB1dFR5cGUuQVVUT0NPTVBMRVRFOlxuICAgICAgICAgICAgICAgIHNlZ21lbnQgPSBvcGVyYW5kLnRleHQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFNlYXJjaElucHV0VHlwZS5EQVRFOlxuICAgICAgICAgICAgICAgIHNlZ21lbnQgPSBvcGVyYW5kLmZvcm1hdChEQVRFX0ZPUk1BVF9TVFJJTkcpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBTZWFyY2hJbnB1dFR5cGUuREFURV9USU1FOlxuICAgICAgICAgICAgICAgIHNlZ21lbnQgPSBvcGVyYW5kLmZvcm1hdChEQVRFX1RJTUVfRk9STUFUX1NUUklORyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHNlZ21lbnQgPSBvcGVyYW5kO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7c2VnbWVudCwgYm9sZDogdHJ1ZX07XG4gICAgfVxufVxuIl19
|
|
532
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0ZWdvcnkuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AbmV0Z3JpZi9jb21wb25lbnRzLWNvcmUvIiwic291cmNlcyI6WyJsaWIvc2VhcmNoL21vZGVscy9jYXRlZ29yeS9jYXRlZ29yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFHOUMsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFDdEUsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3BELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUMsZUFBZSxFQUFFLFFBQVEsRUFBYyxFQUFFLEVBQUUsYUFBYSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQzlFLE9BQU8sRUFBQyxZQUFZLEVBQUUsY0FBYyxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ2pFLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQy9ELE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLHVDQUF1QyxDQUFDO0FBQzFFLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBSzFELE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUVoRCxPQUFPLEVBQUMsa0JBQWtCLEVBQUUsdUJBQXVCLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUd6Rjs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUNILE1BQU0sT0FBZ0IsUUFBUTtJQTZDMUI7Ozs7Ozs7Ozs7T0FVRztJQUNILFlBQXlDLGdCQUErQixFQUMvQixpQkFBdUMsRUFDMUMsZUFBdUIsRUFDcEIsVUFBMkIsRUFDcEMsSUFBbUIsRUFDbkIsZ0JBQWlDO1FBTHhCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBZTtRQUMvQixzQkFBaUIsR0FBakIsaUJBQWlCLENBQXNCO1FBQzFDLG9CQUFlLEdBQWYsZUFBZSxDQUFRO1FBQ3BCLGVBQVUsR0FBVixVQUFVLENBQWlCO1FBQ3BDLFNBQUksR0FBSixJQUFJLENBQWU7UUFDbkIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFpQjtRQUM3RCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksa0JBQWtCLENBQ3pDLGVBQWUsQ0FBQyxRQUFRLEVBQ3hCLHNCQUFzQixFQUN0QixLQUFLLEVBQ0wsSUFBSSxHQUFHLEVBQTBCLEVBQ2pDLEdBQUcsRUFBRTtZQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsdURBQXVEO2tCQUNqRSxnRUFBZ0UsQ0FBQyxDQUFDO1FBQzVFLENBQUMsQ0FDSixDQUFDO1FBRUYsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDO1FBQzdELElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLGFBQWEsQ0FBaUMsQ0FBQyxDQUFDLENBQUM7UUFDbkYsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksZUFBZSxDQUEwQyxTQUFTLENBQUMsQ0FBQztRQUNsRyxJQUFJLENBQUMscUJBQXFCLEdBQUcsRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLG1CQUFtQixFQUFFLENBQUM7UUFDckQsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksZUFBZSxDQUFrQyxTQUFTLENBQUMsQ0FBQztRQUM1RixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUUxQixJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUMzQixHQUFHLENBQUMsWUFBWSxDQUFDLEVBQUU7WUFDZixJQUFJLENBQUMsWUFBWSxFQUFFO2dCQUNmLE9BQU8sU0FBUyxDQUFDO2FBQ3BCO1lBRUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLHVCQUF1QixFQUFFLENBQUM7WUFDOUQsTUFBTSxHQUFHLEdBQUcsQ0FBQyxHQUFHLFlBQVksQ0FBQyxDQUFDO1lBQzlCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQztZQUNqQixPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ3BCLE1BQU0sUUFBUSxHQUFHLElBQUksb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsRUFDL0QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksRUFBRSxFQUMvQixJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzlCLElBQUksQ0FBQyxJQUFJLEVBQUU7b0JBQ1AsS0FBSyxHQUFHLEtBQUssQ0FBQztpQkFDakI7Z0JBQ0QsT0FBTyxRQUFRLENBQUM7WUFDcEIsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FDTCxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNuQixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzNDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxPQUFPO1FBQ1YsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNuQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDekMsQ0FBQztJQWNEOzs7Ozs7O09BT0c7SUFDSCxJQUFXLG1CQUFtQjtRQUMxQixPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUNwRCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILElBQVcsa0JBQWtCO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2hELENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxJQUFXLFNBQVM7UUFDaEIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQzNCLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsZ0JBQWdCO1FBQ3ZCLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNsQixNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDdkMsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxnQkFBZ0I7UUFDdkIsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDO0lBQzNDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsSUFBVyxxQkFBcUI7UUFDNUIsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxJQUFXLGlCQUFpQjtRQUN4QixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUNsRCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLGlCQUFpQjtRQUN4QixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbEQsQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQWMsZUFBZTtRQUN6QixNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDbEIsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3RDLE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFFRDs7T0FFRztJQUNILElBQWMscUJBQXFCO1FBQy9CLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsRUFBRTtZQUM1QixNQUFNLElBQUksS0FBSyxDQUFDLCtEQUErRCxDQUFDLENBQUM7U0FDcEY7UUFDRCxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQztJQUNsRCxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNJLGNBQWMsQ0FBQyxhQUFxQjtRQUN2QyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7UUFDeEMsSUFBSSxhQUFhLEdBQUcsQ0FBQyxJQUFJLGFBQWEsSUFBSSxTQUFTLENBQUMsTUFBTSxFQUFFO1lBQ3hELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLCtDQUErQyxDQUFDLENBQUM7WUFDaEUsT0FBTztTQUNWO1FBQ0QsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSSxXQUFXLENBQUMsU0FBbUI7UUFDbEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM1RSxJQUFJLEtBQUssR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFO1lBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0scUNBQXFDLEtBQUssd0JBQXdCO2tCQUM5RixrQ0FBa0MsQ0FBQyxDQUFDO1NBQzdDO1FBQ0QsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUM1QixJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3hEO1FBQ0QsSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFO1lBQ2IsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztTQUN2QztJQUNMLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxLQUFLO1FBQ1IsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRTtZQUNwQyxFQUFFLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNPLGFBQWEsQ0FBQyxTQUFtQjtRQUN2QyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLEVBQUU7WUFDNUIsTUFBTSxJQUFJLEtBQUssQ0FBQyw2REFBNkQsQ0FBQyxDQUFDO1NBQ2xGO1FBQ0QsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLFNBQXFDLENBQUMsQ0FBQztJQUNwSCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxpQkFBaUIsQ0FBQyxTQUFtQjtRQUN4QyxPQUFPLElBQUksbUJBQW1CLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxxQkFBcUI7UUFDeEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBWUQ7O09BRUc7SUFDSSxrQkFBa0I7UUFDckIsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQztJQUM3QyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxzQkFBc0I7UUFDekIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBVUQ7Ozs7Ozs7OztPQVNHO0lBQ0ksY0FBYztRQUNqQixJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFO1lBQ3pCLE9BQU8sU0FBUyxDQUFDO1NBQ3BCO1FBQ0QsT0FBTztZQUNILFFBQVEsRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQy9CLGFBQWEsRUFBRSxJQUFJLENBQUMsMkJBQTJCLEVBQUU7WUFDakQsTUFBTSxFQUFFLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtTQUN0QyxDQUFDO0lBQ04sQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLGdCQUFnQixDQUFDLFFBQW1DO1FBQ3ZELE1BQU0sT0FBTyxHQUFHLElBQUksYUFBYSxDQUFPLENBQUMsQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUN0RSxJQUFJLENBQUMsc0JBQXNCLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ3hELE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDZixPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDdkIsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNPLGtCQUFrQjtRQUN4QixJQUFJLENBQUMsb0JBQW9CLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFdBQTBCLEVBQUUsRUFBRTtZQUM1RSxJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFO2dCQUNwQyxFQUFFLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzNCLENBQUMsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLFdBQVcsRUFBRTtnQkFDZCw2RkFBNkY7Z0JBQzdGLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDbkMsSUFBSSxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtvQkFDekMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztpQkFDN0M7Z0JBQ0QsT0FBTzthQUNWO1lBRUQsSUFBSSxXQUFXLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sRUFBRTtnQkFDbEUsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxHQUFHLFdBQVcsQ0FBQyxnQkFBZ0IsRUFBRTtvQkFDckUsTUFBTSxFQUFFLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztvQkFDN0IsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQztvQkFDeEQsRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTt3QkFDbkQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxDQUFDO29CQUM1QyxDQUFDLENBQUMsQ0FBQztvQkFDSCxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2lCQUN2QzthQUNKO1lBRUQsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO1lBRXBHLElBQUksV0FBVyxDQUFDLGdCQUFnQixLQUFLLENBQUMsRUFBRTtnQkFDcEMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzthQUM5RDtRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVEOzs7O09BSUc7SUFDTyxtQkFBbUIsQ0FBQyxZQUFvQjtRQUM5QyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLEVBQUU7WUFDNUIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUMxQyxPQUFPO1NBQ1Y7UUFDRCxJQUFJLFlBQVksSUFBSSxJQUFJLENBQUMscUJBQXFCLEVBQUU7WUFDNUMsT0FBTztTQUNWO1FBRUQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNqRCxJQUFJLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDbkUsSUFBSSxJQUFJLENBQUMsb0JBQW9CLENBQUMsUUFBUSxFQUFFLEVBQUU7b0JBQ3RDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7aUJBQzdDO2dCQUNELE9BQU87YUFDVjtTQUNKO1FBRUQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEksQ0FBQztJQVNEOzs7OztPQUtHO0lBQ08sMkJBQTJCO1FBQ2pDLE9BQU87WUFDSCxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUU7U0FDbEUsQ0FBQztJQUNOLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNPLG9CQUFvQjtRQUMxQixNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDbEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNqRCxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzFFO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQUVEOzs7T0FHRztJQUNPLHFCQUFxQixDQUFDLGdCQUE2QjtRQUN6RCxPQUFPLGdCQUFnQixDQUFDLEtBQUssQ0FBQztJQUNsQyxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7O09BV0c7SUFDTyw2QkFBNkIsQ0FBQyxhQUE0QztRQUNoRixNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBdUIsQ0FBQyxDQUFDO1FBQ2hJLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7UUFDcEYsT0FBTyxNQUFNLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7T0FhRztJQUNPLHNCQUFzQixDQUFDLE1BQXNCO1FBQ25ELElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsRUFBRTtZQUM1QixNQUFNLElBQUksS0FBSyxDQUFDLG9GQUFvRixDQUFDLENBQUM7U0FDekc7UUFDRCxJQUFJLElBQUksQ0FBQyxxQkFBcUIsS0FBSyxNQUFNLENBQUMsTUFBTSxFQUFFO1lBQzlDLE1BQU0sSUFBSSxLQUFLLENBQUMsdUNBQXVDLElBQUksQ0FBQyxxQkFDNUQsc0RBQXNELE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDO1NBQzVFO1FBQ0QsTUFBTSw2QkFBNkIsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkYsTUFBTSxPQUFPLEdBQUcsSUFBSSxhQUFhLENBQU8sQ0FBQyxDQUFDLENBQUM7UUFDM0MsUUFBUSxDQUFDLDZCQUE2QixDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFO1lBQzVGLElBQUksQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUMsQ0FBQztZQUNyQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDZixPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDdkIsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDTyx1QkFBdUIsQ0FBQyxLQUFjO1FBQzVDLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3JCLENBQUM7SUFRRDs7Ozs7OztPQU9HO0lBQ08sc0JBQXNCLENBQUMsS0FBVTtRQUN2QyxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRUQ7O09BRUc7SUFDSSx3QkFBd0I7UUFDM0IsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUN6QixPQUFPLEVBQUUsQ0FBQztTQUNiO1FBQ0QsT0FBTztZQUNILEVBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUM7WUFDdkQsR0FBRyxJQUFJLENBQUMscUNBQXFDLEVBQUU7WUFDL0MsR0FBRyxJQUFJLENBQUMsZ0NBQWdDLEVBQUU7U0FDN0MsQ0FBQztJQUNOLENBQUM7SUFPRDs7T0FFRztJQUNPLGdDQUFnQztRQUN0QyxNQUFNLE1BQU0sR0FBNkIsRUFBRSxDQUFDO1FBQzVDLElBQUksWUFBWSxHQUFHLENBQUMsQ0FBQztRQUNyQixLQUFLLE1BQU0sT0FBTyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyx1QkFBdUIsRUFBRSxFQUFFO1lBQ25FLElBQUksT0FBTyxLQUFLLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRTtnQkFDeEMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsOEJBQThCLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztnQkFDL0QsWUFBWSxFQUFFLENBQUM7YUFDbEI7aUJBQU07Z0JBQ0gsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFDLE9BQU8sRUFBQyxDQUFDLENBQUM7YUFDMUI7U0FDSjtRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFFRDs7T0FFRztJQUNPLDhCQUE4QixDQUFDLFlBQW9CO1FBQ3pELElBQUksT0FBTyxDQUFDO1FBQ1osTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFlBQVksQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUMvRCxRQUFRLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDcEIsS0FBSyxlQUFlLENBQUMsWUFBWTtnQkFDN0IsT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7Z0JBQ3ZCLE1BQU07WUFDVixLQUFLLGVBQWUsQ0FBQyxJQUFJO2dCQUNyQixPQUFPLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO2dCQUM3QyxNQUFNO1lBQ1YsS0FBSyxlQUFlLENBQUMsU0FBUztnQkFDMUIsT0FBTyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsdUJBQXVCLENBQUMsQ0FBQztnQkFDbEQsTUFBTTtZQUNWO2dCQUNJLE9BQU8sR0FBRyxPQUFPLENBQUM7Z0JBQ2xCLE1BQU07U0FDYjtRQUNELE9BQU8sRUFBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRDs7OztPQUlHO0lBQ08sa0JBQWtCLENBQUMsYUFBd0I7UUFDakQsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLEtBQUssSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUN0RixDQUFDOztBQS9uQkQ7O0dBRUc7QUFDdUIsMEJBQWlCLEdBQUcsVUFBVSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtPcGVyYXRvcn0gZnJvbSAnLi4vb3BlcmF0b3Ivb3BlcmF0b3InO1xuaW1wb3J0IHtMb2dnZXJTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9sb2dnZXIvc2VydmljZXMvbG9nZ2VyLnNlcnZpY2UnO1xuaW1wb3J0IHtRdWVyeX0gZnJvbSAnLi4vcXVlcnkvcXVlcnknO1xuaW1wb3J0IHtFbGVtZW50YXJ5UHJlZGljYXRlfSBmcm9tICcuLi9wcmVkaWNhdGUvZWxlbWVudGFyeS1wcmVkaWNhdGUnO1xuaW1wb3J0IHtTZWFyY2hJbnB1dFR5cGV9IGZyb20gJy4vc2VhcmNoLWlucHV0LXR5cGUnO1xuaW1wb3J0IHtGb3JtQ29udHJvbH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIGZvcmtKb2luLCBPYnNlcnZhYmxlLCBvZiwgUmVwbGF5U3ViamVjdH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2RlYm91bmNlVGltZSwgZGVmYXVsdElmRW1wdHksIG1hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtPcGVyYXRvclRlbXBsYXRlUGFydH0gZnJvbSAnLi4vb3BlcmF0b3ItdGVtcGxhdGUtcGFydCc7XG5pbXBvcnQge0luY3JlbWVudGluZ0NvdW50ZXJ9IGZyb20gJy4uLy4uLy4uL3V0aWxpdHkvaW5jcmVtZW50aW5nLWNvdW50ZXInO1xuaW1wb3J0IHtDb25maWd1cmF0aW9uSW5wdXR9IGZyb20gJy4uL2NvbmZpZ3VyYXRpb24taW5wdXQnO1xuaW1wb3J0IHtDYXRlZ29yeUdlbmVyYXRvck1ldGFkYXRhLCBDYXRlZ29yeU1ldGFkYXRhQ29uZmlndXJhdGlvbn0gZnJvbSAnLi4vcGVyc2lzdGFuY2UvZ2VuZXJhdG9yLW1ldGFkYXRhJztcbmltcG9ydCB7Q2F0ZWdvcmllc30gZnJvbSAnLi9jYXRlZ29yaWVzJztcbmltcG9ydCB7T3BlcmF0b3JTZXJ2aWNlfSBmcm9tICcuLi8uLi9vcGVyYXRvci1zZXJ2aWNlL29wZXJhdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHtPcGVyYXRvcnN9IGZyb20gJy4uL29wZXJhdG9yL29wZXJhdG9ycyc7XG5pbXBvcnQge29mVm9pZH0gZnJvbSAnLi4vLi4vLi4vdXRpbGl0eS9vZi12b2lkJztcbmltcG9ydCB7RmlsdGVyVGV4dFNlZ21lbnR9IGZyb20gJy4uL3BlcnNpc3RhbmNlL2ZpbHRlci10ZXh0LXNlZ21lbnQnO1xuaW1wb3J0IHtEQVRFX0ZPUk1BVF9TVFJJTkcsIERBVEVfVElNRV9GT1JNQVRfU1RSSU5HfSBmcm9tICcuLi8uLi8uLi9tb21lbnQvdGltZS1mb3JtYXRzJztcbmltcG9ydCB7VHlwZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8qKlxuICogVGhlIHRvcCBsZXZlbCBvZiBhYnN0cmFjdGlvbiBpbiBzZWFyY2ggcXVlcnkgZ2VuZXJhdGlvbi4gUmVwcmVzZW50cyBhIHNldCBvZiBpbmRleGVkIGZpZWxkcyB0aGF0IGNhbiBiZSBzZWFyY2hlZC5cbiAqIEVuY2Fwc3VsYXRlcyB0aGUgdGhlIHN0YXRlIGFuZCBsb2dpYyBvZiB0aGUgcXVlcnkgY29uc3RydWN0aW9uIHByb2Nlc3MuXG4gKlxuICogQXMgb3Bwb3NlZCB0byB7QGxpbmsgT3BlcmF0b3J9cyBDYXRlZ29yaWVzIGFyZSBub3Qgc3RhdGVsZXNzIGFuZCBzaG91bGRuJ3QgYmUgc2hhcmVkLlxuICogQSBzaW5nbGUgQ2F0ZWdvcnkgaW5zdGFuY2UgaXMgY2FwYWJsZSBvZiBob2xkaW5nIHRoZSBzdGF0ZSBvZiBvbmUge0BsaW5rIEVkaXRhYmxlUHJlZGljYXRlfSxcbiAqIG9yIGNhbiBiZSB1c2VkIGFzIGEgYnVpbGRlciB0byBmb3JtIGFuIHVubGltaXRlZCBhbW91bnQgb2YgW0VsZW1lbnRhcnlQcmVkaWNhdGVzXXtAbGluayBFbGVtZW50YXJ5UHJlZGljYXRlfS5cbiAqXG4gKiBZb3UgY2FuIHVzZSB7QGxpbmsgQ2F0ZWdvcnlGYWN0b3J5fSB0byBnZXQgaW5zdGFuY2VzIG9mIENhdGVnb3J5IGNsYXNzZXMuXG4gKiBBbHRlcm5hdGl2ZWx5IHlvdSBjYW4gdXNlIHRoZSBbY2xvbmUoKV17QExpbmsgQ2F0ZWdvcnkjY2xvbmV9IG1ldGhvZCB0byBkdXBsaWNhdGUgYW4gZXhpc3RpbmcgaW5zdGFuY2UuXG4gKlxuICogSWYgeW91IHdhbnQgdG8gbWFrZSB5b3VyIG93biBDYXRlZ29yeSBjbGFzcyB5b3UgaGF2ZSB0byBtYWtlIHN1cmUgdGhhdCB0aGUgY29uc3RydWN0b3IgdGFrZXMge0BsaW5rIE9wZXJhdG9yU2VydmljZX0gYXMgaXQncyBmaXJzdFxuICogYXJndW1lbnQgYW5kIHtAbGluayBMb2dnZXJTZXJ2aWNlfSBhcyBpdCdzIHNlY29uZCBhcmd1bWVudC4gQWx0ZXJuYXRpdmVseSB5b3UgY2FuIG1ha2UgeW91ciBvd24gaW1wbGVtZW50YXRpb24gb2YgdGhlXG4gKiB7QGxpbmsgQ2F0ZWdvcnlGYWN0b3J5fSBzbywgdGhhdCB5b3VyIHN0eWxlIG9mIGNvbnN0cnVjdG9ycyBpcyBzdXBwb3J0ZWQuXG4gKlxuICogQHR5cGVwYXJhbSBUIHR5cGUgb2Ygb2JqZWN0cyB0aGUgY2F0ZWdvcnkgZXhwZWN0cyB0byBnZW5lcmF0ZSBxdWVyaWVzIGZyb21cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENhdGVnb3J5PFQ+IHtcblxuICAgIC8qKlxuICAgICAqIFRoZSB7QGxpbmsgQ2F0ZWdvcnlNZXRhZGF0YUNvbmZpZ3VyYXRpb259IGtleSBmb3IgdGhpcyBDYXRlZ29yeSdzIHtAbGluayBPcGVyYXRvcn1cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgc3RhdGljIHJlYWRvbmx5IE9QRVJBVE9SX01FVEFEQVRBID0gJ29wZXJhdG9yJztcblxuICAgIC8qKlxuICAgICAqIENvbnRhaW5zIHRoZSBgRm9ybUNvbnRyb2xgIG9iamVjdCB0aGF0IGlzIHVzZWQgdG8gZHJpdmUgdGhlIG9wZXJhdG9yIHNlbGVjdGlvbi5cbiAgICAgKlxuICAgICAqIFRoZSBjYXRlZ29yeSBjYW4gc3Vic2NyaWJlIHRvIGl0IGlmIGl0IHdpc2hlcyB0byByZWFjdCB0byB0aGUgc2VsZWN0aW9uIGNoYW5nZSBieSB0aGUgdXNlci5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgX29wZXJhdG9yRm9ybUNvbnRyb2w6IEZvcm1Db250cm9sO1xuXG4gICAgLyoqXG4gICAgICogU3RvcmVzIHRoZSBgRm9ybUNvbnRyb2xgIG9iamVjdHMgdGhhdCBhcmUgcHVzaGVkIGludG8gdGhlIG9ic2VydmFibGUgd2hlbiB0aGUgbnVtYmVyIG9mIG9wZXJhbmRzIGNoYW5nZXMuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIF9vcGVyYW5kc0Zvcm1Db250cm9sczogQXJyYXk8Rm9ybUNvbnRyb2w+O1xuXG4gICAgLyoqXG4gICAgICogQ29udGFpbnMgdGhlIGBGb3JtQ29udHJvbGAgb2JqZWN0cyB0aGF0IGNhbiBiZSB1c2VkIHRvIGlucHV0IHNlYXJjaCBhcmd1bWVudHMuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIF9vcGVyYW5kc0Zvcm1Db250cm9scyQ6IFJlcGxheVN1YmplY3Q8QXJyYXk8Rm9ybUNvbnRyb2w+IHwgdW5kZWZpbmVkPjtcblxuICAgIC8qKlxuICAgICAqIENvbnRhaW5zIHRoZSBvcGVyYXRvciB0ZW1wbGF0ZSBwYXJ0cyB0aGF0IG1ha2UgdXAgdGhlIG9wZXJhbmRzIEdVSS5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgX29wZXJhdG9yVGVtcGxhdGUkOiBCZWhhdmlvclN1YmplY3Q8QXJyYXk8T3BlcmF0b3JUZW1wbGF0ZVBhcnQ+IHwgdW5kZWZpbmVkPjtcblxuICAgIC8qKlxuICAgICAqIEdlbmVyYXRlcyBJRHMgZm9yIHRlbXBsYXRlIHBhcnRzIHN1cHBsaWVkIHRvIG5nIGZvci5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgX3RyYWNrQnlJZEdlbmVyYXRvcjogSW5jcmVtZW50aW5nQ291bnRlcjtcblxuICAgIC8qKlxuICAgICAqIEVtaXQgYSBuZXcgYFByZWRpY2F0ZWAgaWYgdGhlIGBDYXRlZ29yeWAgaXMgaW4gYSBzdGF0ZSB0aGF0IGl0IGNhbiBiZSBjcmVhdGVkLlxuICAgICAqIEVtaXRzIGB1bmRlZmluZWRgIGlmIHRoZSBgQ2F0ZWdvcnlgIGlzIG5vdCBpbiBzdWNoIHN0YXRlLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBfZ2VuZXJhdGVkUHJlZGljYXRlJDogQmVoYXZpb3JTdWJqZWN0PEVsZW1lbnRhcnlQcmVkaWNhdGUgfCB1bmRlZmluZWQ+O1xuXG4gICAgLyoqXG4gICAgICogVXRpbGl0eSB2YXJpYWJsZSB0aGF0IGNhbiBiZSB1c2VkIGFzIHZhbHVlIGZvciB0aGUgW2NvbmZpZ3VyYXRpb25JbnB1dHMkXXtAbGluayBDYXRlZ29yeSNjb25maWd1cmF0aW9uSW5wdXRzJH0gYE9ic2VydmFibGVgLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBfT1BFUkFUT1JfSU5QVVQ6IENvbmZpZ3VyYXRpb25JbnB1dDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb25zdHJ1Y3RvciBmaWxscyB0aGUgdmFsdWVzIG9mIGFsbCBwcm90ZWN0ZWQgZmllbGRzIGFuZCB0aGVuIGNhbGxzIHRoZSBbaW5pdGlhbGl6ZUNhdGVnb3J5KClde0BsaW5rIENhdGVnb3J5I2luaXRpYWxpemVDYXRlZ29yeX1cbiAgICAgKiBtZXRob2QuIElmIHlvdSB3YW50IHRvIG92ZXJyaWRlIHRoZSBjYXRlZ29yeSBjcmVhdGlvbiBiZWhhdmlvciBvdmVycmlkZSB0aGF0IG1ldGhvZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBfZWxhc3RpY0tleXdvcmRzIEVsYXN0aWNzZWFyY2gga2V5d29yZHMgdGhhdCBzaG91bGQgYmUgcXVlcmllZCBieSBxdWVyaWVzIGdlbmVyYXRlZCB3aXRoIHRoaXMgY2F0ZWdvcnlcbiAgICAgKiBAcGFyYW0gX2FsbG93ZWRPcGVyYXRvcnMgT3BlcmF0b3JzIHRoYXQgY2FuIGJlIHVzZWQgdG8gZ2VuZXJhdGVkIHF1ZXJpZXMgb24gdGhlIGFib3ZlIGtleXdvcmRzXG4gICAgICogQHBhcmFtIHRyYW5zbGF0aW9uUGF0aCBwYXRoIHRvIHRoZSB0cmFuc2xhdGlvbiBzdHJpbmdcbiAgICAgKiBAcGFyYW0gX2lucHV0VHlwZSBpbnB1dCBmaWVsZCB0eXBlIHRoYXQgc2hvdWxkIGJlIHVzZWQgdG8gZW50ZXIgb3BlcmF0b3IgYXJndW1lbnRzIGZvciB0aGlzIGNhdGVnb3J5XG4gICAgICogQHBhcmFtIF9sb2cgdXNlZCB0byByZWNvcmQgaW5mb3JtYXRpb24gYWJvdXQgaW5jb3JyZWN0IHVzZSBvZiB0aGlzIGNsYXNzXG4gICAgICogQHBhcmFtIF9vcGVyYXRvclNlcnZpY2UgdXNlZCB0byByZXNvbHZlIHNlcmlhbGl6ZWQgb3BlcmF0b3JzIGR1cmluZyBkZXNlcmlhbGl6YXRpb25cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgY29uc3RydWN0b3IocHJvdGVjdGVkIHJlYWRvbmx5IF9lbGFzdGljS2V5d29yZHM6IEFycmF5PHN0cmluZz4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZCByZWFkb25seSBfYWxsb3dlZE9wZXJhdG9yczogQXJyYXk8T3BlcmF0b3I8YW55Pj4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyByZWFkb25seSB0cmFuc2xhdGlvblBhdGg6IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkIHJlYWRvbmx5IF9pbnB1dFR5cGU6IFNlYXJjaElucHV0VHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9sb2c6IExvZ2dlclNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfb3BlcmF0b3JTZXJ2aWNlOiBPcGVyYXRvclNlcnZpY2UpIHtcbiAgICAgICAgdGhpcy5fT1BFUkFUT1JfSU5QVVQgPSBuZXcgQ29uZmlndXJhdGlvbklucHV0KFxuICAgICAgICAgICAgU2VhcmNoSW5wdXRUeXBlLk9QRVJBVE9SLFxuICAgICAgICAgICAgJ3NlYXJjaC5vcGVyYXRvci5uYW1lJyxcbiAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgbmV3IE1hcDxzdHJpbmcsIEFycmF5PHVua25vd24+PigpLFxuICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ29uZmlndXJhdGlvbklucHV0IG9mIHR5cGUgT1BFUkFUT1IgaXMgYSBwbGFjZWhvbGRlciEnXG4gICAgICAgICAgICAgICAgICAgICsgJyBVc2Ugb3BlcmF0b3IgcmVsYXRlZCBtZXRob2RzIGZyb20gdGhlIENhdGVnb3J5IGNsYXNzIGluc3RlYWQuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fb3BlcmF0b3JGb3JtQ29udHJvbCA9IHRoaXMuX09QRVJBVE9SX0lOUFVULmZvcm1Db250cm9sO1xuICAgICAgICB0aGlzLl9vcGVyYW5kc0Zvcm1Db250cm9scyQgPSBuZXcgUmVwbGF5U3ViamVjdDxBcnJheTxGb3JtQ29udHJvbD4gfCB1bmRlZmluZWQ+KDEpO1xuICAgICAgICB0aGlzLl9vcGVyYXRvclRlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXJyYXk8T3BlcmF0b3JUZW1wbGF0ZVBhcnQ+IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICAgICAgICB0aGlzLl9vcGVyYW5kc0Zvcm1Db250cm9scyA9IFtdO1xuICAgICAgICB0aGlzLl90cmFja0J5SWRHZW5lcmF0b3IgPSBuZXcgSW5jcmVtZW50aW5nQ291bnRlcigpO1xuICAgICAgICB0aGlzLl9nZW5lcmF0ZWRQcmVkaWNhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxFbGVtZW50YXJ5UHJlZGljYXRlIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICAgICAgICB0aGlzLmluaXRpYWxpemVDYXRlZ29yeSgpO1xuXG4gICAgICAgIHRoaXMub3BlcmFuZHNGb3JtQ29udHJvbHMkLnBpcGUoXG4gICAgICAgICAgICBtYXAoZm9ybUNvbnRyb2xzID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWZvcm1Db250cm9scykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHBhcnRzID0gdGhpcy5zZWxlY3RlZE9wZXJhdG9yLmdldE9wZXJhdG9yTmFtZVRlbXBsYXRlKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZmNzID0gWy4uLmZvcm1Db250cm9sc107XG4gICAgICAgICAgICAgICAgbGV0IGZpcnN0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFydHMubWFwKHBhcnQgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZW1wbGF0ZSA9IG5ldyBPcGVyYXRvclRlbXBsYXRlUGFydChwYXJ0ID8gcGFydCA6IGZjcy5zaGlmdCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHJhY2tCeUlkR2VuZXJhdG9yLm5leHQoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnQgPyB1bmRlZmluZWQgOiBmaXJzdCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghcGFydCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3QgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApLnN1YnNjcmliZSh0ZW1wbGF0ZSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9vcGVyYXRvclRlbXBsYXRlJC5uZXh0KHRlbXBsYXRlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xlYW5zIHVwIHRoZSBpbnRlcm5hbCBzdGF0ZSBvZiB0aGUgb2JqZWN0IGJlZm9yZSBpdHMgZGVzdHJ1Y3Rpb24uXG4gICAgICpcbiAgICAgKiBUaGUgZGV2ZWxvcGVyIG11c3QgY2FsbCB0aGlzIG1ldGhvZCBhdCBhbiBhcHByb3ByaWF0ZSBtb21lbnQsIGFzIHRoaXMgb2JqZWN0IGNhbm5vdCBob29rIGludG8gdGhlIEFuZ3VsYXIgbGlmZWN5Y2xlLlxuICAgICAqL1xuICAgIHB1YmxpYyBkZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9vcGVyYW5kc0Zvcm1Db250cm9scyQuY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5fb3BlcmF0b3JUZW1wbGF0ZSQuY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5fZ2VuZXJhdGVkUHJlZGljYXRlJC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyYXRpb24gaW5wdXQgcmVwcmVzZW50IHRoZSBzdGVwcyB0aGF0IGFyZSBuZWNlc3NhcnkgdG8gY29uZmlndXJlIHRoZSBjYXRlZ29yeS5cbiAgICAgKiBUaGUgbGFzdCBpbnB1dCBtdXN0IGFsd2F5cyBiZSBvZiB0eXBlIFtPUEVSQVRPUl17QGxpbmsgU2VhcmNoSW5wdXRUeXBlI09QRVJBVE9SfS5cbiAgICAgKiBTZWxlY3RpbmcgdGhlIG9wZXJhdG9yIGNvbXBsZXRlcyB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUgY2F0ZWdvcnkgYW5kIHRoZSBhcmd1bWVudHMgaW5wdXRzXG4gICAgICogKGJhc2VkIG9uIGNhdGVnb3J5IGlucHV0IHR5cGUgYW5kIG9wZXJhdG9yIGFyaXR5KSBhcmUgZGlzcGxheWVkLlxuICAgICAqXG4gICAgICogQmV3YXJlIHRoYXQgd2hpbGUgbW9zdCBjYXRlZ29yaWVzIGFsd2F5cyByZXR1cm4gdGhlIHNhbWUgY29uc3RhbnQgaXQgbXVzdCBub3QgYWx3YXlzIGJlIHRoZSBjYXNlLlxuICAgICAqXG4gICAgICogQHJldHVybnMgdGhlIHJlcXVpcmVkIGlucHV0IHR5cGUgZm9yIGNvbmZpZ3VyYXRpb24gc3RlcHMgb2YgdGhpcyBjYXRlZ29yeVxuICAgICAqL1xuICAgIHB1YmxpYyBhYnN0cmFjdCBnZXQgY29uZmlndXJhdGlvbklucHV0cyQoKTogT2JzZXJ2YWJsZTxBcnJheTxDb25maWd1cmF0aW9uSW5wdXQ+PjtcblxuICAgIC8qKlxuICAgICAqIElmIHlvdSB1c2UgdGhlIGBDYXRlZ29yeWAgY2xhc3MgYXMgYSBzb3J0IG9mIFByZWRpY2F0ZUJ1aWxkZXIsIHRoZW4geW91IHdhbnQgdG8gdXNlIHRoZVxuICAgICAqIFtnZW5lcmF0ZVByZWRpY2F0ZSgpXXtAbGluayBDYXRlZ29yeSNnZW5lcmF0ZVByZWRpY2F0ZX0gbWV0aG9kIGluc3RlYWQuXG4gICAgICpcbiAgICAgKiBUaGlzIHN0cmVhbSBwdWJsaXNoZXMgZWl0aGVyIGEgbmV3IGBQcmVkaWNhdGVgIG9iamVjdCBvciBgdW5kZWZpbmVkYCBiYXNlZCBvbiBjaGFuZ2VzIHRvIHRoZSBgRm9ybUNvbnRyb2xzYCB0aGF0IGFyZVxuICAgICAqIG1hbmFnZWQgYnkgdGhpcyBjbGFzcy4gSWYgKGJhc2VkIG9uIHVzZXIgaW5wdXQpIHRoZSBgQ2F0ZWdvcnlgIHJlYWNoZXMgYSBzdGF0ZSB3aGVuIGNvbnN0cnVjdGlvbiBvZiBhIGBQcmVkaWNhdGVgIGlzIHBvc3NpYmxlXG4gICAgICogaXQgd2lsbCBlbWl0IHRoaXMgYFByZWRpY2F0ZWAuIElmIGl0IHJlYWNoZXMgYSBzdGF0ZSB3aGVuIHRoZSBgUHJlZGljYXRlYCBjYW4gbm90IGxvbmdlciBiZSBjcmVhdGVkIGB1bmRlZmluZWRgIGlzIGVtaXR0ZWQuXG4gICAgICovXG4gICAgcHVibGljIGdldCBnZW5lcmF0ZWRQcmVkaWNhdGUkKCk6IE9ic2VydmFibGU8RWxlbWVudGFyeVByZWRpY2F0ZSB8IHVuZGVmaW5lZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2VuZXJhdGVkUHJlZGljYXRlJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSB7QGxpbmsgUHJlZGljYXRlfSBjdXJyZW50bHkgZ2VuZXJhdGVkIGJ5IHRoZSBDYXRlZ29yeS5cbiAgICAgKlxuICAgICAqIEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZSBbZ2VuZXJhdGVkUHJlZGljYXRlJF17QGxpbmsgQ2F0ZWdvcnkjZ2VuZXJhdGVkUHJlZGljYXRlJH0uXG4gICAgICovXG4gICAgcHVibGljIGdldCBnZW5lcmF0ZWRQcmVkaWNhdGUoKTogRWxlbWVudGFyeVByZWRpY2F0ZSB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZW5lcmF0ZWRQcmVkaWNhdGUkLmdldFZhbHVlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQmV3YXJlIHRoYXQgd2hpbGUgbW9zdCBjYXRlZ29yaWVzIGFsd2F5cyByZXR1cm4gdGhlIHNhbWUgY29uc3RhbnQgaXQgaXMgbm90IGEgcmVxdWlyZW1lbnQuXG4gICAgICogQW4gZXhhbXBsZSBmb3Igc3VjaCBiZWhhdmlvciBpcyB0aGUge0BsaW5rIENhc2VEYXRhc2V0fSBjYXRlZ29yeSwgd2hlcmUgdGhlIGFyZ3VtZW50IGlucHV0IHR5cGUgZGVwZW5kc1xuICAgICAqIG9uIHRoZSBzZWxlY3RlZCBkYXRhIGZpZWxkIHR5cGUuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB0aGUgcmVxdWlyZWQgaW5wdXQgdHlwZSBmb3IgYXJndW1lbnRzIGZvciB0aGlzIGNhdGVnb3J5XG4gICAgICovXG4gICAgcHVibGljIGdldCBpbnB1dFR5cGUoKTogU2VhcmNoSW5wdXRUeXBlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lucHV0VHlwZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyB0aGUgc2V0IG9mIE9wZXJhdG9ycyB0aGF0IGNhbiBiZSB1c2VkIHdpdGggdGhpcyBjYXRlZ29yeS4gSXRlcmF0aW9uIG9yZGVyIGRldGVybWluZXMgdGhlIGRpc3BsYXkgb3JkZXIuXG4gICAgICovXG4gICAgcHVibGljIGdldCBhbGxvd2VkT3BlcmF0b3JzKCk6IEFycmF5PE9wZXJhdG9yPGFueT4+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgICAgIHJlc3VsdC5wdXNoKC4uLnRoaXMuX2FsbG93ZWRPcGVyYXRvcnMpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgb3BlcmF0b3Igb3IgYHVuZGVmaW5lZGAgaWYgbm8gb3BlcmF0b3IgaXMgc2VsZWN0ZWQuXG4gICAgICovXG4gICAgcHVibGljIGdldCBzZWxlY3RlZE9wZXJhdG9yKCk6IE9wZXJhdG9yPGFueT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fb3BlcmF0b3JGb3JtQ29udHJvbC52YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyBhbiBhcnJheSBvZiBgRm9ybUNvbnRyb2xgIG9iamVjdHMgdGhhdCBjb250YWlucyBhcyBtYW55IGNvbnRyb2xzIGFzIGlzIHRoZSBhcml0eSBvZiB0aGUgc2VsZWN0ZWQgb3BlcmF0b3IuXG4gICAgICogQ2FsbGluZyB0aGlzIG1ldGhvZCBtdWx0aXBsZSB0aW1lcyB3aWxsIHJldHVybiB0aGUgc2FtZSBgRm9ybUNvbnRyb2xgIGluc3RhbmNlcy5cbiAgICAgKiBXaGVuIG5vIG9wZXJhdG9yIGlzIHNlbGVjdGVkIGB1bmRlZmluZWRgIGlzIGVtaXR0ZWQuXG4gICAgICovXG4gICAgcHVibGljIGdldCBvcGVyYW5kc0Zvcm1Db250cm9scyQoKTogT2JzZXJ2YWJsZTxBcnJheTxGb3JtQ29udHJvbD4gfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29wZXJhbmRzRm9ybUNvbnRyb2xzJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIG5ldyB2YWx1ZSBpcyBlbWl0dGVkIHdoZW5ldmVyIHRoZSBzZWxlY3RlZCBvcGVyYXRvciBjaGFuZ2VzLiBgdW5kZWZpbmVkYCBpcyBlbWl0dGVkIGlmIG5vIG9wZXJhdG9yIGlzIHNlbGVjdGVkLlxuICAgICAqXG4gICAgICogQHJldHVybnMgW29wZXJhdG9ycyB0ZW1wbGF0ZV17QGxpbmsgT3BlcmF0b3IjZ2V0T3BlcmF0b3JOYW1lVGVtcGxhdGV9IGluIHByb2Nlc3NlZCBmb3JtIGZpdCBmb3IgR1VJIHJlbmRlcmluZ1xuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgb3BlcmF0b3JUZW1wbGF0ZSQoKTogT2JzZXJ2YWJsZTxBcnJheTxPcGVyYXRvclRlbXBsYXRlUGFydD4gfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29wZXJhdG9yVGVtcGxhdGUkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEByZXR1cm5zIHdoZXRoZXIgdGhlIGNhdGVnb3J5IGlzIGZ1bGx5IGNvbmZpZ3VyZWQgYW5kIHJlcHJlc2VudHMgYSB2YWxpZCBwcmVkaWNhdGUgb3Igbm90XG4gICAgICovXG4gICAgcHVibGljIGdldCBwcm92aWRlc1ByZWRpY2F0ZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fZ2VuZXJhdGVkUHJlZGljYXRlJC5nZXRWYWx1ZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEByZXR1cm5zIHRoZSBzZXQgb2YgRWxhc3RpY3NlYXJjaCBrZXl3b3JkcyB0aGF0IHNob3VsZCBiZSBxdWVyaWVkIGJ5IHF1ZXJpZXMgZ2VuZXJhdGVkIHdpdGggdGhpcyBjYXRlZ29yeS5cbiAgICAgKiBUaGUgbWV0aG9kIGNhbiBiZSBvdmVycmlkZGVuIGlmIHRoZSBrZXl3b3JkcyBhcmUgbm90IHN0YXRpYyBhbmQgY2hhbmdlIGJhc2VkIG9uIHNvbWUgYWRkaXRpb25hbCBzZWxlY3Rpb24gKGVnLiBEYXRhIGZpZWxkcylcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgZ2V0IGVsYXN0aWNLZXl3b3JkcygpOiBBcnJheTxzdHJpbmc+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgICAgIHJlc3VsdC5wdXNoKC4uLnRoaXMuX2VsYXN0aWNLZXl3b3Jkcyk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHJldHVybnMgdGhlIGFyaXR5IG9mIHRoZSBzZWxlY3RlZCBvcGVyYXRvci4gVGhyb3dzIGFuIGVycm9yIGlmIG5vIG9wZXJhdG9yIGlzIHNlbGVjdGVkLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBnZXQgc2VsZWN0ZWRPcGVyYXRvckFyaXR5KCk6IG51bWJlciB7XG4gICAgICAgIGlmICghdGhpcy5pc09wZXJhdG9yU2VsZWN0ZWQoKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBbiBvcGVyYXRvciBtdXMgYmUgc2VsZWN0ZWQgYmVmb3JlIGl0cyBhcml0eSBjYW4gYmUgcmVzb2x2ZWQhJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRPcGVyYXRvci5udW1iZXJPZk9wZXJhbmRzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoYW5nZXMgdGhlIHN0YXRlIG9mIHRoZSBDYXRlZ29yeS4gQ2F0ZWdvcnkgY2FuIGNyZWF0ZSBxdWVyaWVzIHdoZW4gYW4ge0BsaW5rIE9wZXJhdG9yfSBpcyBzZWxlY3RlZC5cbiAgICAgKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIHVzZWZ1bCBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIENhdGVnb3J5IGNsYXNzIGFzIHByZWRpY2F0ZSBidWlsZGVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wZXJhdG9ySW5kZXggaW5kZXggaW4gdGhlIFthbGxvd2VkT3BlcmF0b3JzXXtAbGluayBDYXRlZ29yeSNhbGxvd2VkT3BlcmF0b3JzfSBhcnJheSBvZiB0aGUge0BsaW5rIE9wZXJhdG9yfSB0aGF0XG4gICAgICogc2hvdWxkIGJlIHNlbGVjdGVkXG4gICAgICovXG4gICAgcHVibGljIHNlbGVjdE9wZXJhdG9yKG9wZXJhdG9ySW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBvcGVyYXRvcnMgPSB0aGlzLmFsbG93ZWRPcGVyYXRvcnM7XG4gICAgICAgIGlmIChvcGVyYXRvckluZGV4IDwgMCB8fCBvcGVyYXRvckluZGV4ID49IG9wZXJhdG9ycy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuX2xvZy53YXJuKGBUaGUgcHJvdmlkZWQgJ29wZXJhdG9ySW5kZXgnIGlzIG91dCBvZiByYW5nZS5gKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9vcGVyYXRvckZvcm1Db250cm9sLnNldFZhbHVlKG9wZXJhdG9yc1tvcGVyYXRvckluZGV4XSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hhbmdlcyB0aGUgc3RhdGUgb2YgdGhlIENhdGVnb3J5IGFuZCBnZW5lcmF0ZXMgYSBxdWVyeSBpZiBhbGwgbmVjZXNzYXJ5IG9wZXJhbmRzIHdlcmUgc2V0LlxuICAgICAqXG4gICAgICogSWYgeW91IGFyZSB1c2luZyB0aGUgY2F0ZWdvcnkgYXMgYSBidWlsZGVyLiBDb25zaWRlciB1c2luZyB0aGUgW2dlbmVyYXRlUHJlZGljYXRlKClde0BsaW5rIENhdGVnb3J5I2dlbmVyYXRlUHJlZGljYXRlfVxuICAgICAqIG1ldGhvZCBpbnN0ZWFkLlxuICAgICAqXG4gICAgICogQHBhcmFtIHVzZXJJbnB1dCB2YWx1ZXMgZW50ZXJlZCBieSB0aGUgdXNlci4gVGhlIGxlbmd0aCBvZiB0aGUgYXJyYXkgc2hvdWxkIG1hdGNoIHRoZVxuICAgICAqIFthcml0eV17QGxpbmsgT3BlcmF0b3IjX251bWJlck9mT3BlcmFuZHN9IG9mIHRoZSBzZWxlY3RlZCBPcGVyYXRvci5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0T3BlcmFuZHModXNlcklucHV0OiBBcnJheTxUPik6IHZvaWQge1xuICAgICAgICBjb25zdCByYW5nZSA9IE1hdGgubWluKHVzZXJJbnB1dC5sZW5ndGgsIHRoaXMuX29wZXJhbmRzRm9ybUNvbnRyb2xzLmxlbmd0aCk7XG4gICAgICAgIGlmIChyYW5nZSA8IHVzZXJJbnB1dC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuX2xvZy53YXJuKGAke3VzZXJJbnB1dC5sZW5ndGh9IG9wZXJhbmRzIGFyZSBiZWluZyBzZXQsIGJ1dCBvbmx5ICR7cmFuZ2V9IGlucHV0cyBhcmUgYXZhaWxhYmxlIWBcbiAgICAgICAgICAgICAgICArICcgRXh0cmEgb3BlcmFuZHMgd2lsbCBiZSBpZ25vcmVkLicpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmFuZ2U7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5fb3BlcmFuZHNGb3JtQ29udHJvbHNbaV0uc2V0VmFsdWUodXNlcklucHV0W2ldKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmFuZ2UgIT09IDApIHtcbiAgICAgICAgICAgIHRoaXMub3BlcmFuZFZhbHVlQ2hhbmdlcyhyYW5nZSAtIDEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVzZXRzIHRoZSBzdGF0ZSBvZiB0aGUgQ2F0ZWdvcnksIGRlc2VsZWN0aW5nIGFueSBzZWxlY3RlZCBjYXRlZ29yeSBhbmQgcmVtb3Zpbmcgb3RoZXIgc3RhdGVcbiAgICAgKiBpbmZvcm1hdGlvbiBpZiB0aGUgQ2F0ZWdvcnkgZGVmaW5lcyB0aGVtLlxuICAgICAqXG4gICAgICogVGhpcyBtZXRob2QgY2FuIGJlIHVzZWQgdG8gcmVzZXQgdGhlIHN0YXRlIG9mIHRoZSBjYXRlZ29yeSBhZnRlciBlYWNoIHByZWRpY2F0ZSBjb25zdHJ1Y3RlZCxcbiAgICAgKiBlZmZlY3RpdmVseSB0dXJuaW5nIHRoZSBjYXRlZ29yeSBpbnN0YW5jZSBpbnRvIGEgcHJlZGljYXRlIGJ1aWxkZXIuXG4gICAgICovXG4gICAgcHVibGljIHJlc2V0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNsZWFyT3BlcmF0b3JTZWxlY3Rpb24oKTtcbiAgICAgICAgdGhpcy5fb3BlcmFuZHNGb3JtQ29udHJvbHMuZm9yRWFjaChmYyA9PiB7XG4gICAgICAgICAgICBmYy5zZXRWYWx1ZSh1bmRlZmluZWQpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYWxscyB0aGUgW2NyZWF0ZVF1ZXJ5XXtAbGluayBPcGVyYXRvciNjcmVhdGVRdWVyeX0gbWV0aG9kIG9uIHRoZSBzZWxlY3RlZCBPcGVyYXRvci5cbiAgICAgKlxuICAgICAqIFRocm93cyBhbiBFcnJvciBpZiBubyBPcGVyYXRvciBpcyBzZWxlY3RlZC5cbiAgICAgKlxuICAgICAqIE92ZXJyaWRlIHRoaXMgbWV0aG9kIGlmIHRoZSBxdWVyeSBzaG91bGQgYmUgZ2VuZXJhdGVkIGluIHNvbWUgb3RoZXIgd2F5LlxuICAgICAqIEBwYXJhbSB1c2VySW5wdXQgdmFsdWVzIGVudGVyZWQgYnkgdGhlIHVzZXIuIFRoZSBsZW5ndGggb2YgdGhlIGFycmF5IHNob3VsZCBtYXRjaCB0aGVcbiAgICAgKiBbYXJpdHlde0BsaW5rIE9wZXJhdG9yI19udW1iZXJPZk9wZXJhbmRzfSBvZiB0aGUgc2VsZWN0ZWQgT3BlcmF0b3IuXG4gICAgICogQHJldHVybnMgdGhlIFF1ZXJ5IGdlbmVyYXRlZCBieSB0aGUgc2VsZWN0ZWQgT3BlcmF0b3JcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgZ2VuZXJhdGVRdWVyeSh1c2VySW5wdXQ6IEFycmF5PFQ+KTogUXVlcnkge1xuICAgICAgICBpZiAoIXRoaXMuaXNPcGVyYXRvclNlbGVjdGVkKCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2F0ZWdvcnkgY2Fubm90IGdlbmVyYXRlIGEgUXVlcnkgaWYgbm8gT3BlcmF0b3IgaXMgc2VsZWN0ZWQnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fb3BlcmF0b3JGb3JtQ29udHJvbC52YWx1ZS5jcmVhdGVRdWVyeSh0aGlzLmVsYXN0aWNLZXl3b3JkcywgdXNlcklucHV0IGFzIHVua25vd24gYXMgQXJyYXk8c3RyaW5nPik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FsbHMgdGhlIFtnZW5lcmF0ZVF1ZXJ5XXtAbGluayBDYXRlZ29yeSNnZW5lcmF0ZVF1ZXJ5fSBtZXRob2QgYW5kIGNyZWF0ZXMgYW4ge0BsaW5rIEVsZW1lbnRhcnlQcmVkaWNhdGV9IHdpdGggdGhlIHJlc3VsdC5cbiAgICAgKiBAcGFyYW0gdXNlcklucHV0IHZhbHVlcyBlbnRlcmVkIGJ5IHRoZSB1c2VyLiBUaGUgbGVuZ3RoIG9mIHRoZSBhcnJheSBzaG91bGQgbWF0Y2ggdGhlXG4gICAgICogW2FyaXR5XXtAbGluayBPcGVyYXRvciNfbnVtYmVyT2ZPcGVyYW5kc30gb2YgdGhlIHNlbGVjdGVkIE9wZXJhdG9yLlxuICAgICAqIEByZXR1cm5zIFByZWRpY2F0ZSB3aXRoIHtAbGluayBRdWVyeX0gZ2VuZXJhdGVkIGJ5IHRoaXMgb2JqZWN0J3MgW2dlbmVyYXRlUXVlcnlde0BsaW5rIENhdGVnb3J5I2dlbmVyYXRlUXVlcnl9IG1ldGhvZFxuICAgICAqL1xuICAgIHB1YmxpYyBnZW5lcmF0ZVByZWRpY2F0ZSh1c2VySW5wdXQ6IEFycmF5PFQ+KTogRWxlbWVudGFyeVByZWRpY2F0ZSB7XG4gICAgICAgIHJldHVybiBuZXcgRWxlbWVudGFyeVByZWRpY2F0ZSh0aGlzLmdlbmVyYXRlUXVlcnkodXNlcklucHV0KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VsZWN0cyB0aGUgZGVmYXVsdCBvcGVyYXRvciB0aGF0IHNob3VsZCBiZSB1c2VkIGZvciBxdWVyeSBnZW5lcmF0aW9uLCB3aGVuIG5vIE9wZXJhdG9yIHNlbGVjdGlvbiBpcyBwcm92aWRlZCB0byB0aGUgdXNlci5cbiAgICAgKlxuICAgICAqIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHNlbGVjdHMgdGhlIGZpcnN0IG9wZXJhdG9yIGluIHRoZSBbX2FsbG93ZWRPcGVyYXRvcnNde0BsaW5rIENhdGVnb3J5I2FsbG93ZWRPcGVyYXRvcnN9IGFycmF5LlxuICAgICAqXG4gICAgICogU2VlIFtzZWxlY3RPcGVyYXRvcigpXXtAbGluayBDYXRlZ29yeSNzZWxlY3RPcGVyYXRvcn0gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gICAgICovXG4gICAgcHVibGljIHNlbGVjdERlZmF1bHRPcGVyYXRvcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWxlY3RPcGVyYXRvcigwKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyB0aGUgdHJhbnNsYXRpb24gc3RyaW5nIHBhdGggZm9yIHRoZSB0ZXh0IHRoYXQgc2hvdWxkIGJlIGRpc3BsYXllZCBpbiB0aGUgaW5wdXQgcGxhY2Vob2xkZXJcbiAgICAgKi9cbiAgICBwdWJsaWMgYWJzdHJhY3QgZ2V0IGlucHV0UGxhY2Vob2xkZXIoKTogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQHJldHVybnMgd2hldGhlciB0aGUgY2F0ZWdvcnkgdGV4dCBzaG91bGQgYmUgcmVuZGVyZWQgd2l0aCBib2xkIHRleHQgd2hlbiBzZWxlY3RlZFxuICAgICAqL1xuICAgIHB1YmxpYyBhYnN0cmFjdCBnZXQgZGlzcGxheUJvbGQoKTogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEByZXR1cm5zIHdoZXRoZXIgYW4gb3BlcmF0b3IgaXMgY3VycmVudGx5IHNlbGVjdGVkIG9yIG5vdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgaXNPcGVyYXRvclNlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9vcGVyYXRvckZvcm1Db250cm9sLnZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlc2VsZWN0cyB0aGUgY3VycmVudGx5IHNlbGVjdGVkIG9wZXJhdG9yIChpZiBhbnkpXG4gICAgICovXG4gICAgcHVibGljIGNsZWFyT3BlcmF0b3JTZWxlY3Rpb24oKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX29wZXJhdG9yRm9ybUNvbnRyb2wuc2V0VmFsdWUodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZHVwbGljYXRlIG9mIHRoZSBjdXJyZW50IGNhdGVnb3J5IG9iamVjdC4gTm90ZSB0aGF0IGEgZHVwbGljYXRlIGlzIE5PVCBhIGNsb25lLlxuICAgICAqIFRoZSBzdGF0ZSBvZiB0aGUgcmV0dXJuZWQgY2F0ZWdvcnkgaXMgbm90IG5lY2Vzc2FyaWx5IHRoZSBzYW1lIGFzIHRoZSBzdGF0ZSBvZiB0aGlzIGNhdGVnb3J5LlxuICAgICAqXG4gICAgICogQHJldHVybnMgYSBjYXRlZ29yeSBpbnN0YW5jZSBvZiB0aGUgc2FtZSB0eXBlIGFzIHRoaXMgY2F0ZWdvcnkgaW4gaXRzIGluaXRpYWwgc3RhdGUuXG4gICAgICovXG4gICAgcHVibGljIGFic3RyYWN0IGR1cGxpY2F0ZSgpOiBDYXRlZ29yeTxUPjtcblxuICAgIC8qKlxuICAgICAqIFByb3ZpZGVzIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24gZm9yIHRoZSBzZXJpYWxpc2F0aW9uIG9mIHRoaXMgY2F0ZWdvcnkncyBzdGF0ZS5cbiAgICAgKlxuICAgICAqIE5vdCBldmVyeSBzdGF0ZSBtdXN0IGJlIHByZXNlcnZhYmxlLiBUaGUgZGVmYXVsdCBsaWJyYXJ5IGltcGxlbWVudGF0aW9uIHN1cHBvcnRzIG9ubHkgdGhlIHByZXNlcnZhdGlvbiBvZiB0aGUgZmluYWwgc3RhdGUgd2hlbiB0aGVcbiAgICAgKiBDYXRlZ29yeSBpcyBnZW5lcmF0aW5nIGEgcHJlZGljYXRlIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIGFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIGZvciB0aGUgcmVjb25zdHJ1Y3Rpb24gb2YgdGhpcyBjYXRlZ29yeSdzIHN0YXRlLFxuICAgICAqIGJhcnJpbmcgaW5mb3JtYXRpb24gYWJvdXQgYWxsb3dlZCBuZXRzLiBSZXR1cm5zIGB1bmRlZmluZWRgIGlmIHRoZSBjYXRlZ29yeSBpcyBub3QgaW4gYSBzdGF0ZSB0aGF0IGdlbmVyYXRlcyBhIHByZWRpY2F0ZS5cbiAgICAgKiBTZWUgW3Byb3ZpZGVzUHJlZGljYXRlKClde0BsaW5rIENhdGVnb3J5I3Byb3ZpZGVzUHJlZGljYXRlfS5cbiAgICAgKi9cbiAgICBwdWJsaWMgY3JlYXRlTWV0YWRhdGEoKTogQ2F0ZWdvcnlHZW5lcmF0b3JNZXRhZGF0YSB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmICghdGhpcy5wcm92aWRlc1ByZWRpY2F0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY2F0ZWdvcnk6IHRoaXMuc2VyaWFsaXplQ2xhc3MoKSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYXRpb246IHRoaXMuY3JlYXRlTWV0YWRhdGFDb25maWd1cmF0aW9uKCksXG4gICAgICAgICAgICB2YWx1ZXM6IHRoaXMuY3JlYXRlTWV0YWRhdGFWYWx1ZXMoKVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlc3RvcmVzIHRoZSBzYXZlZCBzdGF0ZSBjb250YWluZWQgaW4gdGhlIHByb3ZpZGVkIG1ldGFkYXRhLlxuICAgICAqXG4gICAgICogQHBhcmFtIG1ldGFkYXRhIHRoZSBtZXRhZGF0YSBjcmVhdGVkIGJ5IGNhbGxpbmcgdGhlIFtjcmVhdGVNZXRhZGF0YSgpXXtAbGluayBDYXRlZ29yeSNjcmVhdGVNZXRhZGF0YX0gbWV0aG9kXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBhbiBPYnNlcnZhYmxlLiBXaGVuIHRoZSBPYnNlcnZhYmxlIGVtaXRzIHRoZSBjYXRlZ29yeSBoYXMgZmluaXNoZWQgcmVzdG9yaW5nIGl0cyBzdGF0ZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgbG9hZEZyb21NZXRhZGF0YShtZXRhZGF0YTogQ2F0ZWdvcnlHZW5lcmF0b3JNZXRhZGF0YSk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgICAgICBjb25zdCByZXN1bHQkID0gbmV3IFJlcGxheVN1YmplY3Q8dm9pZD4oMSk7XG4gICAgICAgIHRoaXMubG9hZENvbmZpZ3VyYXRpb25Gcm9tTWV0YWRhdGEobWV0YWRhdGEuY29uZmlndXJhdGlvbikuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubG9hZFZhbHVlc0Zyb21NZXRhZGF0YShtZXRhZGF0YS52YWx1ZXMpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzdWx0JC5uZXh0KCk7XG4gICAgICAgICAgICAgICAgcmVzdWx0JC5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0JC5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZSBpbiB0aGUgY29uc3RydWN0b3IuIEFwYXJ0IGZyb20gY2FsbGluZyB0aGlzIG1ldGhvZCwgdGhlIGNvbnN0cnVjdG9yIG9ubHkgY3JlYXRlcyBpbnN0YW5jZXMgdG8gZmlsbCB0aGUgcHJvdGVjdGVkXG4gICAgICogZmllbGRzIG9mIHRoaXMgY2xhc3MuXG4gICAgICpcbiAgICAgKiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBtYW5hZ2VzIGNyZWF0aW9uIG9mIG9wZXJhbmQgYEZvcm1Db250cm9sYCBpbnN0YW5jZXMgYW5kIG1hbmFnZXMgc3Vic2NyaXB0aW9ucyB0byB0aGVtLlxuICAgICAqXG4gICAgICogWW91IGNhbiBvdmVycmlkZSB0aGlzIG1ldGhvZCB0byBjaGFuZ2UgdGhlIGluaXRpYWxpemF0aW9uIG9mIHlvdXIgY2F0ZWdvcnkgd2l0aG91dCBoYXZpbmcgdG8gcmV3cml0ZSB0aGUgYmFzZVxuICAgICAqIGNvbnN0cnVjdG9yIGZyb20gc2NyYXRjaC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgaW5pdGlhbGl6ZUNhdGVnb3J5KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9vcGVyYXRvckZvcm1Db250cm9sLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKG5ld09wZXJhdG9yOiBPcGVyYXRvcjxhbnk+KSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9vcGVyYW5kc0Zvcm1Db250cm9scy5mb3JFYWNoKGZjID0+IHtcbiAgICAgICAgICAgICAgICBmYy5zZXRWYWx1ZSh1bmRlZmluZWQpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmICghbmV3T3BlcmF0b3IpIHtcbiAgICAgICAgICAgICAgICAvLyB1bmRlZmluZWQgaXMgbmV4dC1lZCBpbnRvIHRoZSBzdHJlYW0uIE1hcmtlZCBhcyBjb2RlIHNtZWxsIGJ5IHNvbmFyIHdoZW4gZXhwbGljaXRseSBzdGF0ZWRcbiAgICAgICAgICAgICAgICB0aGlzLl9vcGVyYW5kc0Zvcm1Db250cm9scyQubmV4dCgpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9vcGVyYW5kc0Zvcm1Db250cm9scy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZ2VuZXJhdGVkUHJlZGljYXRlJC5uZXh0KHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG5ld09wZXJhdG9yLm51bWJlck9mT3BlcmFuZHMgPiB0aGlzLl9vcGVyYW5kc0Zvcm1Db250cm9scy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB3aGlsZSAodGhpcy5fb3BlcmFuZHNGb3JtQ29udHJvbHMubGVuZ3RoIDwgbmV3T3BlcmF0b3IubnVtYmVyT2ZPcGVyYW5kcykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmYyA9IG5ldyBGb3JtQ29udHJvbCgpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50TGVuZ3RoID0gdGhpcy5fb3BlcmFuZHNGb3JtQ29udHJvbHMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICBmYy52YWx1ZUNoYW5nZXMucGlwZShkZWJvdW5jZVRpbWUoNjAwKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3BlcmFuZFZhbHVlQ2hhbmdlcyhjdXJyZW50TGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX29wZXJhbmRzRm9ybUNvbnRyb2xzLnB1c2goZmMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fb3BlcmFuZHNGb3JtQ29udHJvbHMkLm5leHQodGhpcy5fb3BlcmFuZHNGb3JtQ29udHJvbHMuc2xpY2UoMCwgbmV3T3BlcmF0b3IubnVtYmVyT2ZPcGVyYW5kcykpO1xuXG4gICAgICAgICAgICBpZiAobmV3T3BlcmF0b3IubnVtYmVyT2ZPcGVyYW5kcyA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2dlbmVyYXRlZFByZWRpY2F0ZSQubmV4dCh0aGlzLmdlbmVyYXRlUHJlZGljYXRlKFtdKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBtZXRob2QgdGhhdCBpcyAoYnkgZGVmYXVsdCkgY2FsbGVkIHdoZW5ldmVyIGFuIG9wZXJhbmQgYEZvcm1Db250cm9sYCBjaGFuZ2VzIGl0cyB2YWx1ZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcGVyYW5kSW5kZXggdGhlIGluZGV4IG9mIHRoZSBvcGVyYW5kIHRoYXQgY2hhbmdlZCBpdHMgdmFsdWVcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgb3BlcmFuZFZhbHVlQ2hhbmdlcyhvcGVyYW5kSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuaXNPcGVyYXRvclNlbGVjdGVkKCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2dlbmVyYXRlZFByZWRpY2F0ZSQubmV4dCh1bmRlZmluZWQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcGVyYW5kSW5kZXggPj0gdGhpcy5zZWxlY3RlZE9wZXJhdG9yQXJpdHkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zZWxlY3RlZE9wZXJhdG9yQXJpdHk7IGkrKykge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmlzT3BlcmFuZFZhbHVlU2VsZWN0ZWQodGhpcy5fb3BlcmFuZHNGb3JtQ29udHJvbHNbaV0udmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2dlbmVyYXRlZFByZWRpY2F0ZSQuZ2V0VmFsdWUoKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9nZW5lcmF0ZWRQcmVkaWNhdGUkLm5leHQodW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZ2VuZXJhdGVkUHJlZGljYXRlJC5uZXh0KHRoaXMuZ2VuZXJhdGVQcmVkaWNhdGUodGhpcy5fb3BlcmFuZHNGb3JtQ29udHJvbHMubWFwKGZjID0+IHRoaXMudHJhbnNmb3JtQ2F0ZWdvcnlWYWx1ZShmYy52YWx1ZSkpKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHJldHVybnMgdGhlIGNhdGVnb3J5IGNsYXNzIGluIGEgc2VyaWFsaXphYmxlIGZvcm1cbiAgICAgKlxuICAgICAqIEBkZXByZWNhdGVkIGluIDUuNi4wIC0gQ2F0ZWdvcnkgc2VyaWFsaXNhdGlvbiBzaG91bGQgYmUgZG9uZSBieSB1dGlsaXNpbmcgdGhlIHtAbGluayBDYXRlZ29yeVJlc29sdmVyU2VydmljZX0gaW5zdGVhZFxuICAgICAqL1xuICAgIGFic3RyYWN0IHNlcmlhbGl6ZUNsYXNzKCk6IENhdGVnb3JpZXMgfCBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBzZXJpYWxpemVzIG9ubHkgdGhlIG9wZXJhdG9yLlxuICAgICAqIElmIHRoZSBjYXRlZ29yeSBjb250YWlucyBhZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24sIHRoaXMgbWV0aG9kIG11c3QgYmUgZXh0ZW5kZWQuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiBmb3IgdGhlIHJlY29uc3RydWN0aW9uIG9mIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoaXMgY2F0ZWdvcnkgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgY3JlYXRlTWV0YWRhdGFDb25maWd1cmF0aW9uKCk6IENhdGVnb3J5TWV0YWRhdGFDb25maWd1cmF0aW9uIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIFtDYXRlZ29yeS5PUEVSQVRPUl9NRVRBREFUQV06IHRoaXMuc2VsZWN0ZWRPcGVyYXRvci5zZXJpYWxpemUoKVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgdGhlIHZhbHVlIG9mIGFsbCBvcGVyYW5kIGZvcm0gY29udHJvbCBvYmplY3RzIHVwIHRvIHRoZSBjdXJyZW50IG51bWJlciBvZiBvcGVyYW5kcy5cbiAgICAgKiBUbyBzZXJpYWxpemUgdmFsdWUgb2YgZWFjaCBvcGVyYW5kIHRoZSBbc2VyaWFsaXplT3BlcmFuZFZhbHVlKClde0BsaW5rIENhdGVnb3J5I3NlcmlhbGl6ZU9wZXJhbmRWYWx1ZX0gbWV0aG9kIGlzIHVzZWQuXG4gICAgICpcbiAgICAgKiBJZiB0aGUgdmFsdWVzIHVzZWQgYnkgdGhpcyBjYXRlZ29yeSBhcmUgbm90IHNlcmlhbGl6YWJsZSwgdGhlbiBlaXRoZXIgdGhpcyBtZXRob2QsIG9yIHRoZSBgc2VyaWFsaXplT3BlcmFuZFZhbHVlYCBtZXRob2QsXG4gICAgICogbXVzdCBiZSBvdmVycmlkZGVuLlxuICAgICAqXG4gICAgICogQHJldHVybnMgYW4gYXJyYXkgY29udGFpbmluZyB2YWx1ZXMgaW5wdXQgYnkgdGhlIHVzZXIgaW4gYSBzZXJpYWxpemFibGUgZm9ybVxuICAgICAqL1xuICAgIHByb3RlY3RlZCBjcmVhdGVNZXRhZGF0YVZhbHVlcygpOiBBcnJheTx1bmtub3duPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc2VsZWN0ZWRPcGVyYXRvckFyaXR5OyBpKyspIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRoaXMuc2VyaWFsaXplT3BlcmFuZFZhbHVlKHRoaXMuX29wZXJhbmRzRm9ybUNvbnRyb2xzW2ldKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gdmFsdWVGb3JtQ29udHJvbCBGb3JtQ29udHJvbCBvYmplY3Qgb2Ygb25lIG9wZXJhbmRcbiAgICAgKiBAcmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIG9wZXJhbmQgaW4gYSBzZXJpYWxpemVkIGZvcm0uIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgdGhlIEZvcm1Db250cm9scyBgdmFsdWVgIGF0dHJpYnV0ZS5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgc2VyaWFsaXplT3BlcmFuZFZhbHVlKHZhbHVlRm9ybUNvbnRyb2w6IEZvcm1Db250cm9sKTogdW5rbm93biB7XG4gICAgICAgIHJldHVybiB2YWx1ZUZvcm1Db250cm9sLnZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlc3RvcmVkIHRoZSBzYXZlZCBjb25maWd1cmF0aW9uIGZyb20gdGhlIG1ldGFkYXRhIGNyZWF0ZWQgYnkgdGhlXG4gICAgICogW2NyZWF0ZU1ldGFkYXRhQ29uZmlndXJhdGlvbigpXXtAbGluayBDYXRlZ29yeSNjcmVhdGVNZXRhZGF0YUNvbmZpZ3VyYXRpb259IG1ldGhvZC5cbiAgICAgKlxuICAgICAqIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJlc3RvcmVzIG9ubHkgdGhlIHNhdmVkIG9wZXJhdG9yLlxuICAgICAqXG4gICAgICogSWYgdGhlIENhdGVnb3J5IG92ZXJyaWRlcyB0aGUgc2VyaWFsaXphdGlvbiBtZXRob2QsIGl0IG11c3Qgb3ZlcnJpZGUgdGhpcyBtZXRob2QgYXMgd2VsbC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjb25maWd1cmF0aW9uIHRoZSBzZXJpYWxpemVkIGNvbmZpZ3VyYXRpb25cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIGFuIE9ic2VydmFibGUuIFdoZW4gdGhlIE9ic2VydmFibGUgZW1pdHMgdGhlIGNhdGVnb3J5IGhhcyBmaW5pc2hlZCBsb2FkaW5nIGl0cyBjb25maWd1cmF0aW9uLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBsb2FkQ29uZmlndXJhdGlvbkZyb21NZXRhZGF0YShjb25maWd1cmF0aW9uOiBDYXRlZ29yeU1ldGFkYXRhQ29uZmlndXJhdGlvbik6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgICAgICBjb25zdCByZXNvbHZlZE9wZXJhdG9yID0gdGhpcy5fb3BlcmF0b3JTZXJ2aWNlLmdldEZyb21NZXRhZGF0YShjb25maWd1cmF0aW9uW0NhdGVnb3J5Lk9QRVJBVE9SX01FVEFEQVRBXSBhcyBPcGVyYXRvcnMgfCBzdHJpbmcpO1xuICAgICAgICB0aGlzLnNlbGVjdE9wZXJhdG9yKHRoaXMuYWxsb3dlZE9wZXJhdG9ycy5maW5kSW5kZXgob3AgPT4gb3AgPT09IHJlc29sdmVkT3BlcmF0b3IpKTtcbiAgICAgICAgcmV0dXJuIG9mVm9pZCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHNldHMgdGhlIHByb3ZpZGVkIHZhbHVlcyBpbnRvIHRoaXMgQ2F0ZWdvcnkncyBvcGVyYW5kIGZvcm0gY29udHJvbHMuXG4gICAgICpcbiAgICAgKiBBbiBvcGVyYXRvciBtdXN0IGJlIHNldCBiZWZvcmUgY2FsbGluZyB0aGlzIG1ldGhvZCEgT3RoZXJ3aXNlIGFuIGVycm9yIHdpbGwgYmUgdGhyb3duLlxuICAgICAqXG4gICAgICogSWYgdGhlIG51bWJlciBvZiB2YWx1ZXMgZG9lc24ndCBtYXRjaCB0aGUgYXJpdHkgb2YgdGhlIHNlbGVjdGVkIG9wZXJhdG9yIGFuIGVycm9yIHdpbGwgYmUgdGhyb3duIVxuICAgICAqXG4gICAgICogSWYgdGhpcyBDYXRlZ29yeSBvdmVycmlkZXMgdGhlIFtzZXJpYWxpemVPcGVyYW5kVmFsdWUoKV17QGxpbmsgQ2F0ZWdvcnkjc2VyaWFsaXplT3BlcmFuZFZhbHVlfSwgaXQgbXVzdCBhbHNvXG4gICAgICogb3ZlcnJpZGUgaXRzIGRlc2VyaWFsaXphdGlvbiBjb3VudGVycGFydCAtIFtkZXNlcmlhbGl6ZU9wZXJhbmRWYWx1ZSgpXXtAbGluayAjQ2F0ZWdvcnkjZGVzZXJpYWxpemVPcGVyYW5kVmFsdWV9IVxuICAgICAqXG4gICAgICogQHBhcmFtIHZhbHVlcyB0aGUgc2VyaWFsaXplZCB2YWx1ZXMgdGhhdCBzaG91bGQgYmUgbG9hZGVkIGludG8gdGhpcyBDYXRlZ29yeSBpbnN0YW5jZVxuICAgICAqXG4gICAgICogQHJldHVybnMgYW4gT2JzZXJ2YWJsZS4gV2hlbiB0aGUgT2JzZXJ2YWJsZSBlbWl0cyB0aGUgY2F0ZWdvcnkgaGFzIGZpbmlzaGVkIGxvYWRpbmcgaXRzIHZhbHVlcy5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgbG9hZFZhbHVlc0Zyb21NZXRhZGF0YSh2YWx1ZXM6IEFycmF5PHVua25vd24+KTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgICAgIGlmICghdGhpcy5pc09wZXJhdG9yU2VsZWN0ZWQoKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBbiBvcGVyYXRvciBtdXN0IGJlIHNlbGVjdGVkIGJlZm9yZSBDYXRlZ29yeSB2YWx1ZXMgY2FuIGJlIHJlc29sdmVkIGZyb20gbWV0YWRhdGEhJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRPcGVyYXRvckFyaXR5ICE9PSB2YWx1ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBhcml0eSBvZiB0aGUgc2VsZWN0ZWQgb3BlcmF0b3IgKCR7dGhpcy5zZWxlY3RlZE9wZXJhdG9yQXJpdHlcbiAgICAgICAgICAgIH0pIGRvZXNuJ3QgbWF0Y2ggdGhlIG51bWJlciBvZiB0aGUgcHJvdmlkZWQgdmFsdWVzICgke3ZhbHVlcy5sZW5ndGh9KSFgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkZXNlcmlhbGl6ZWRWYWx1ZXNPYnNlcnZhYmxlcyA9IHZhbHVlcy5tYXAodiA9PiB0aGlzLmRlc2VyaWFsaXplT3BlcmFuZFZhbHVlKHYpKTtcbiAgICAgICAgY29uc3QgcmVzdWx0JCA9IG5ldyBSZXBsYXlTdWJqZWN0PHZvaWQ+KDEpO1xuICAgICAgICBmb3JrSm9pbihkZXNlcmlhbGl6ZWRWYWx1ZXNPYnNlcnZhYmxlcykucGlwZShkZWZhdWx0SWZFbXB0eShbXSkpLnN1YnNjcmliZShkZXNlcmlhbGl6ZWRWYWx1ZXMgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRPcGVyYW5kcyhkZXNlcmlhbGl6ZWRWYWx1ZXMpO1xuICAgICAgICAgICAgcmVzdWx0JC5uZXh0KCk7XG4gICAgICAgICAgICByZXN1bHQkLmNvbXBsZXRlKCk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0JC5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gdmFsdWUgdGhlIHNlcmlhbGl6ZWQgb3V0cHV0IG9mIHRoZSBbc2VyaWFsaXplT3BlcmFuZFZhbHVlKClde0BsaW5rIENhdGVnb3J5I3NlcmlhbGl6ZU9wZXJhbmRWYWx1ZX0gbWV0aG9kXG4gICAgICogQHJldHVybnMgYW4gYE9ic2VydmFibGVgIHRoYXQgZW1pdHMgdGhlIGRlc2VyaWFsaXplZCB2YWx1ZSwgdGhhdCBjYW4gYmUgc2V0IGFzIEZvcm1Db250cm9sIHZhbHVlIGFuZCB0aGVuIGNvbXBsZXRlc1xuICAgICAqXG4gICAgICogVGhpcyBtZXRob2QgbWF5IHRocm93IG5hIGVycm9yIGlmIHRoZSB2YWx1ZSBjYW5ub3QgYmUgZGVzZXJpYWxpemVkLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBkZXNlcmlhbGl6ZU9wZXJhbmRWYWx1ZSh2YWx1ZTogdW5rbm93bik6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIHJldHVybiBvZih2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIG5ld1ZhbHVlIHRoZSB2YWx1ZSBvZiB0aGUgYEZvcm1Db250cm9sYCBvYmplY3QgdGhhdCB3ZSB3YW50IHRvIHRlc3RcbiAgICAgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG5ld2x5IHNlbGVjdGVkIHZhbHVlIGlzIGEgdmFsaWQgdmFsdWUsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBhYnN0cmFjdCBpc09wZXJhbmRWYWx1ZVNlbGVjdGVkKG5ld1ZhbHVlOiBhbnkpOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogUGVyZm9ybXMgYSB0cmFuc2Zvcm1hdGlvbiBvZiB0aGUgYEZvcm1Db250cm9sYCB2YWx1ZSBiZWZvcmUgcGFzc2luZyBpdCBpbnRvIHRoZSBzZWxlY3RlZCBgT3BlcmF0b3JgIGZvciBxdWVyeSBnZW5lcmF0aW9uLlxuICAgICAqIEl0IGlzIG1vc3RseSB1c2VmdWwgb25seSBmb3IgQXV0b2NvbXBsZXRlQ2F0ZWdvcmllcywgd2hlcmUgdGhlIHNlbGVjdGVkIHZhbHVlIG9mIHRoZSBGb3JtQ29udHJvbCBpcyBhbiBvYmplY3QuXG4gICAgICpcbiAgICAgKiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBwZXJmb3JtcyBhbiBpZGVudGl0eSB0cmFuc2Zvcm1hdGlvbiAtIHJldHVybnMgdGhlIGlucHV0LlxuICAgICAqIEBwYXJhbSB2YWx1ZSB0aGUgRm9ybUNvbnRyb2xWYWx1ZVxuICAgICAqIEByZXR1cm5zIHRoZSB2YWx1ZSB1c2VkIGZvciBxdWVyeSBnZW5lcmF0aW9uXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHRyYW5zZm9ybUNhdGVnb3J5VmFsdWUodmFsdWU6IGFueSk6IFQge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHJldHVybnMgYW4gQXJyYXkgY29udGFpbmluZyB0ZXh0IHNlZ21lbnRzIHJlcHJlc2VudGluZyB0aGUgY29udGVudCBvZiB0aGUgcHJlZGljYXRlIGdlbmVyYXRlZCBieSB0aGlzIGNhdGVnb3J5XG4gICAgICovXG4gICAgcHVibGljIGNyZWF0ZUZpbHRlclRleHRTZWdtZW50cygpOiBBcnJheTxGaWx0ZXJUZXh0U2VnbWVudD4ge1xuICAgICAgICBpZiAoIXRoaXMucHJvdmlkZXNQcmVkaWNhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAge3NlZ21lbnQ6IHRoaXMudHJhbnNsYXRpb25QYXRoLCBib2xkOiB0aGlzLmRpc3BsYXlCb2xkfSxcbiAgICAgICAgICAgIC4uLnRoaXMuY3JlYXRlQ29uZmlndXJhdGlvbkZpbHRlclRleHRTZWdtZW50cygpLFxuICAgICAgICAgICAgLi4udGhpcy5jcmVhdGVPcGVyYXRvckZpbHRlclRleHRTZWdtZW50cygpXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHJldHVybnMgYW4gQXJyYXkgY29udGFpbmluZyB0ZXh0IHNlZ21lbnRzIHJlcHJlc2VudGluZyB0aGUgY29uZmlndXJhdGlvbiBpbnB1dHMgb2YgdGhpcyBjYXRlZ29yeVxuICAgICAqL1xuICAgIHByb3RlY3RlZCBhYnN0cmFjdCBjcmVhdGVDb25maWd1cmF0aW9uRmlsdGVyVGV4dFNlZ21lbnRzKCk6IEFycmF5PEZpbHRlclRleHRTZWdtZW50PjtcblxuICAgIC8qKlxuICAgICAqIEByZXR1cm5zIGFuIEFycmF5IGNvbnRhaW5pbmcgdGV4dCBzZWdtZW50cyByZXByZXNlbnRpbmcgdGhlIG9wZXJhdG9ycyB3aXRoIG9wZXJhbmRzIG9mIHRoaXMgY2F0ZWdvcnlcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgY3JlYXRlT3BlcmF0b3JGaWx0ZXJUZXh0U2VnbWVudHMoKTogQXJyYXk8RmlsdGVyVGV4dFNlZ21lbnQ+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0OiBBcnJheTxGaWx0ZXJUZXh0U2VnbWVudD4gPSBbXTtcbiAgICAgICAgbGV0IG9wZXJhbmRJbmRleCA9IDA7XG4gICAgICAgIGZvciAoY29uc3Qgc2VnbWVudCBvZiB0aGlzLnNlbGVjdGVkT3BlcmF0b3IuZ2V0T3BlcmF0b3JOYW1lVGVtcGxhdGUoKSkge1xuICAgICAgICAgICAgaWYgKHNlZ21lbnQgPT09IE9wZXJhdG9yLklOUFVUX1BMQUNFSE9MREVSKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2godGhpcy5jcmVhdGVPcGVyYW5kRmlsdGVyVGV4dFNlZ21lbnQob3BlcmFuZEluZGV4KSk7XG4gICAgICAgICAgICAgICAgb3BlcmFuZEluZGV4Kys7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHtzZWdtZW50fSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyBmaWx0ZXIgdGV4dCBzZWdtZW50IHJlcHJlc2VudGluZyB0aGUgb3BlcmFuZCB2YWx1ZSBhdCB0aGUgc3BlY2lmaWVkIGluZGV4XG4gICAgICovXG4gICAgcHJvdGVjdGVkIGNyZWF0ZU9wZXJhbmRGaWx0ZXJUZXh0U2VnbWVudChvcGVyYW5kSW5kZXg6IG51bWJlcik6IEZpbHRlclRleHRTZWdtZW50IHtcbiAgICAgICAgbGV0IHNlZ21lbnQ7XG4gICAgICAgIGNvbnN0IG9wZXJhbmQgPSB0aGlzLl9vcGVyYW5kc0Zvcm1Db250cm9sc1tvcGVyYW5kSW5kZXhdLnZhbHVlO1xuICAgICAgICBzd2l0Y2ggKHRoaXMuaW5wdXRUeXBlKSB7XG4gICAgICAgICAgICBjYXNlIFNlYXJjaElucHV0VHlwZS5BVVRPQ09NUExFVEU6XG4gICAgICAgICAgICAgICAgc2VnbWVudCA9IG9wZXJhbmQudGV4dDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgU2VhcmNoSW5wdXRUeXBlLkRBVEU6XG4gICAgICAgICAgICAgICAgc2VnbWVudCA9IG9wZXJhbmQuZm9ybWF0KERBVEVfRk9STUFUX1NUUklORyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFNlYXJjaElucHV0VHlwZS5EQVRFX1RJTUU6XG4gICAgICAgICAgICAgICAgc2VnbWVudCA9IG9wZXJhbmQuZm9ybWF0KERBVEVfVElNRV9GT1JNQVRfU1RSSU5HKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgc2VnbWVudCA9IG9wZXJhbmQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtzZWdtZW50LCBib2xkOiB0cnVlfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgZm9yIHNlbGVjdGVkIG9wZXJhdG9yXG4gICAgICogQHBhcmFtIG9wZXJhdG9yQ2xhc3MgdGhlIG9wZXJhdG9yIHRvIGJlIGNoZWNrZWRcbiAgICAgKiBAcmV0dXJuIGJvb2xlYW4gb2YgdGhlIHN0YXRlbWVudFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBpc1NlbGVjdGVkT3BlcmF0b3Iob3BlcmF0b3JDbGFzczogVHlwZTxhbnk+KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkT3BlcmF0b3IgPT09IHRoaXMuX29wZXJhdG9yU2VydmljZS5nZXRPcGVyYXRvcihvcGVyYXRvckNsYXNzKTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -14,8 +14,8 @@ 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;
|
|
18
|
-
return Operator.forEachKeyword(elasticKeywords, keyword => new Query(`(${keyword}
|
|
17
|
+
const escapedValue = Operator.escapeInput(args[0]).value.replace(' ', '\\ ');
|
|
18
|
+
return Operator.forEachKeyword(elasticKeywords, keyword => new Query(`(${keyword}:*${escapedValue}*)`));
|
|
19
19
|
}
|
|
20
20
|
getOperatorNameTemplate() {
|
|
21
21
|
return ['search.operator.substring', Operator.INPUT_PLACEHOLDER];
|
|
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Vic3RyaW5nLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQG5ldGdyaWYvY29tcG9uZW50cy1jb3JlLyIsInNvdXJjZXMiOlsibGliL3NlYXJjaC9tb2RlbHMvb3BlcmF0b3Ivc3Vic3RyaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDcEMsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFdEM7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLFNBQVUsU0FBUSxRQUFnQjtJQUMzQztRQUNJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNiLENBQUM7SUFFRCxXQUFXLENBQUMsZUFBOEIsRUFBRSxJQUFtQjtRQUMzRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0IsMkhBQTJIO1FBQzNILDRIQUE0SDtRQUM1SCwyQkFBMkI7UUFDM0IsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM3RSxPQUFPLFFBQVEsQ0FBQyxjQUFjLENBQUMsZUFBZSxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxPQUFPLEtBQUssWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzVHLENBQUM7SUFFRCx1QkFBdUI7UUFDbkIsT0FBTyxDQUFDLDJCQUEyQixFQUFFLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFFRCxTQUFTO1FBQ0wsT0FBTyxTQUFTLENBQUMsU0FBUyxDQUFDO0lBQy9CLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7T3BlcmF0b3J9IGZyb20gJy4vb3BlcmF0b3InO1xuaW1wb3J0IHtRdWVyeX0gZnJvbSAnLi4vcXVlcnkvcXVlcnknO1xuaW1wb3J0IHtPcGVyYXRvcnN9IGZyb20gJy4vb3BlcmF0b3JzJztcblxuLyoqXG4gKiBPcGVyYXRvciB0aGF0IG1hdGNoZXMgaWYgdGhlIGlucHV0IGlzIGEgc3Vic3RyaW5nIG9mIHNvbWUgdmFsdWUuXG4gKiBDYW4gb25seSBiZSB1c2VkIG9uIGZpZWxkcyB0aGF0IGFyZSB0ZXh0cyBhbmQgYXJlIG5vdCBpbmRleGVkIGFzIGtleXdvcmRzLlxuICovXG5leHBvcnQgY2xhc3MgU3Vic3RyaW5nIGV4dGVuZHMgT3BlcmF0b3I8c3RyaW5nPiB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKDEpO1xuICAgIH1cblxuICAgIGNyZWF0ZVF1ZXJ5KGVsYXN0aWNLZXl3b3JkczogQXJyYXk8c3RyaW5nPiwgYXJnczogQXJyYXk8c3RyaW5nPik6IFF1ZXJ5IHtcbiAgICAgICAgdGhpcy5jaGVja0FyZ3VtZW50c0NvdW50KGFyZ3MpO1xuICAgICAgICAvLyBUT0RPIElNUFJPVkVNRU5UIDI3LjQuMjAyMCAtIHdlIGNvdWxkIHVzZSByZWd1bGFyIGV4cHJlc3Npb25zIHRvIHNlYXJjaCBmb3Igc3Vic3RyaW5ncyB3aGljaCB3b3VsZCBzb2x2ZSB0aGUgdW5pbnR1aXRpdmVcbiAgICAgICAgLy8gIGJlaGF2aW9yIHRoYXQgb2NjdXJzIHdoZW4gd2Ugc2VhcmNoIGZvciBzdHJpbmdzIHRoYXQgY29udGFpbiBzcGFjZXMuIFdlIG5lZWQgdG8gZXNjYXBlIHRoZSBpbnB1dCBzdHJpbmcgaW4gYSBzcGVjaWFsIHdheVxuICAgICAgICAvLyAgaWYgd2UgY2hvb3NlIHRvIGRvIHRoaXNcbiAgICAgICAgY29uc3QgZXNjYXBlZFZhbHVlID0gT3BlcmF0b3IuZXNjYXBlSW5wdXQoYXJnc1swXSkudmFsdWUucmVwbGFjZSgnICcsICdcXFxcICcpO1xuICAgICAgICByZXR1cm4gT3BlcmF0b3IuZm9yRWFjaEtleXdvcmQoZWxhc3RpY0tleXdvcmRzLCBrZXl3b3JkID0+IG5ldyBRdWVyeShgKCR7a2V5d29yZH06KiR7ZXNjYXBlZFZhbHVlfSopYCkpO1xuICAgIH1cblxuICAgIGdldE9wZXJhdG9yTmFtZVRlbXBsYXRlKCk6IEFycmF5PHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gWydzZWFyY2gub3BlcmF0b3Iuc3Vic3RyaW5nJywgT3BlcmF0b3IuSU5QVVRfUExBQ0VIT0xERVJdO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSgpOiBPcGVyYXRvcnMgfCBzdHJpbmcge1xuICAgICAgICByZXR1cm4gT3BlcmF0b3JzLlNVQlNUUklORztcbiAgICB9XG59XG4iXX0=
|
|
@@ -10,7 +10,9 @@ import * as i0 from "@angular/core";
|
|
|
10
10
|
* default mapping don't affect your existing code.
|
|
11
11
|
*/
|
|
12
12
|
export class SearchIndexResolverService {
|
|
13
|
-
constructor() {
|
|
13
|
+
constructor() {
|
|
14
|
+
this.KEYWORD = '.keyword';
|
|
15
|
+
}
|
|
14
16
|
/**
|
|
15
17
|
* Constructs the index name for the specified field.
|
|
16
18
|
*
|
|
@@ -23,7 +25,20 @@ export class SearchIndexResolverService {
|
|
|
23
25
|
* @returns the full name of the specified index
|
|
24
26
|
*/
|
|
25
27
|
getIndex(dataFieldIdentifier, index, keyword = false) {
|
|
26
|
-
return `dataSet.${dataFieldIdentifier}.${index}${keyword ?
|
|
28
|
+
return `dataSet.${dataFieldIdentifier}.${index}${keyword ? this.KEYWORD : ''}`;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Constructs the index name for the specified core field.
|
|
32
|
+
*
|
|
33
|
+
* Note that almost all combinations are valid and will not throw an error when used to query the database, but not all combinations are
|
|
34
|
+
* used by the application engine. The {@link SearchIndex} class has some information about which field types map to which indices, but
|
|
35
|
+
* you should consult the backend documentation for more reliable information.
|
|
36
|
+
* @param index the queried index
|
|
37
|
+
* @param keyword whether the keyword of a TEXT index should be queried
|
|
38
|
+
* @returns the full name of the specified index
|
|
39
|
+
*/
|
|
40
|
+
getCoreIndex(index, keyword = false) {
|
|
41
|
+
return `${index}${keyword ? this.KEYWORD : ''}`;
|
|
27
42
|
}
|
|
28
43
|
}
|
|
29
44
|
SearchIndexResolverService.ɵprov = i0.ɵɵdefineInjectable({ factory: function SearchIndexResolverService_Factory() { return new SearchIndexResolverService(); }, token: SearchIndexResolverService, providedIn: "root" });
|
|
@@ -33,4 +48,4 @@ SearchIndexResolverService.decorators = [
|
|
|
33
48
|
},] }
|
|
34
49
|
];
|
|
35
50
|
SearchIndexResolverService.ctorParameters = () => [];
|
|
36
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWluZGV4LXJlc29sdmVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AbmV0Z3JpZi9jb21wb25lbnRzLWNvcmUvIiwic291cmNlcyI6WyJsaWIvc2VhcmNoL3NlYXJjaC1rZXl3b3JkLXJlc29sdmVyLXNlcnZpY2Uvc2VhcmNoLWluZGV4LXJlc29sdmVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQzs7QUFHekM7Ozs7Ozs7O0dBUUc7QUFJSCxNQUFNLE9BQU8sMEJBQTBCO0lBSW5DO1FBRmdCLFlBQU8sR0FBRyxVQUFVLENBQUM7SUFFckIsQ0FBQztJQUVqQjs7Ozs7Ozs7OztPQVVHO0lBQ0UsUUFBUSxDQUFDLG1CQUEyQixFQUFFLEtBQWtCLEVBQUUsT0FBTyxHQUFHLEtBQUs7UUFDNUUsT0FBTyxXQUFXLG1CQUFtQixJQUFJLEtBQUssR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQ25GLENBQUM7SUFFQzs7Ozs7Ozs7O09BU0c7SUFDRSxZQUFZLENBQUMsS0FBYSxFQUFFLE9BQU8sR0FBRyxLQUFLO1FBQzlDLE9BQU8sR0FBRyxLQUFLLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUNwRCxDQUFDOzs7O1lBcENGLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1NlYXJjaEluZGV4fSBmcm9tICcuLi9tb2RlbHMvc2VhcmNoLWluZGV4JztcblxuLyoqXG4gKiBBIHV0aWxpdHkgc2VydmljZSB0aGF0IGFpbXMgdG8gcHJvdmlkZSBlbGFzdGljc2VhcmNoIHF1ZXJ5IHN0cmluZyBxdWVyeSBpbmRleCBuYW1lcyBmb3IgZGF0YSBzZXQgcXVlcmllcy5cbiAqXG4gKiBJZiB5b3VyIGFwcCB1c2VzIGEgY3VzdG9taXNlZCBlbGFzdGljc2VhcmNoIGRhdGFiYXNlIG1hcHBpbmcgZm9yIENhc2Ugb2JqZWN0cywgdGhhdCBhZmZlY3RzIHRoZSB3YXkgZGF0YSBmaWVsZHMgYXJlIGluZGV4ZWQgeW91IG11c3RcbiAqIHByb3ZpZGUgYW4gdXBkYXRlZCB2ZXJzaW9uIG9mIHRoaXMgc2VydmljZSwgc28gdGhhdCBzZWFyY2ggY2FuIGdlbmVyYXRlIGNvcnJlY3QgcXVlcmllcy5cbiAqXG4gKiBZb3UgYXJlIGVuY291cmFnZWQgdG8gdXNlIHRoaXMgc2VydmljZSB3aGVuIGNyZWF0aW5nIHtAbGluayBGaWx0ZXJ9cywgd2l0aCBlbGFzdGljIHF1ZXJ5IHN0cmluZyBxdWVyaWVzLCBzbyB0aGF0IGZ1dHVyZSBjaGFuZ2VzIHRvIHRoZVxuICogZGVmYXVsdCBtYXBwaW5nIGRvbid0IGFmZmVjdCB5b3VyIGV4aXN0aW5nIGNvZGUuXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFNlYXJjaEluZGV4UmVzb2x2ZXJTZXJ2aWNlIHtcblxuICAgIHB1YmxpYyByZWFkb25seSBLRVlXT1JEID0gJy5rZXl3b3JkJztcblxuICAgIGNvbnN0cnVjdG9yKCkgeyB9XG5cbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3RzIHRoZSBpbmRleCBuYW1lIGZvciB0aGUgc3BlY2lmaWVkIGZpZWxkLlxuICAgICAqXG4gICAgICogTm90ZSB0aGF0IGFsbW9zdCBhbGwgY29tYmluYXRpb25zIGFyZSB2YWxpZCBhbmQgd2lsbCBub3QgdGhyb3cgYW4gZXJyb3Igd2hlbiB1c2VkIHRvIHF1ZXJ5IHRoZSBkYXRhYmFzZSwgYnV0IG5vdCBhbGwgY29tYmluYXRpb25zIGFyZVxuICAgICAqIHVzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIGVuZ2luZS4gVGhlIHtAbGluayBTZWFyY2hJbmRleH0gY2xhc3MgaGFzIHNvbWUgaW5mb3JtYXRpb24gYWJvdXQgd2hpY2ggZmllbGQgdHlwZXMgbWFwIHRvIHdoaWNoIGluZGljZXMsIGJ1dFxuICAgICAqIHlvdSBzaG91bGQgY29uc3VsdCB0aGUgYmFja2VuZCBkb2N1bWVudGF0aW9uIGZvciBtb3JlIHJlbGlhYmxlIGluZm9ybWF0aW9uLlxuICAgICAqIEBwYXJhbSBkYXRhRmllbGRJZGVudGlmaWVyIGltcG9ydCBJRCBvZiB0aGUgcXVlcmllZCBkYXRhIGZpZWxkXG4gICAgICogQHBhcmFtIGluZGV4IHRoZSBxdWVyaWVkIGluZGV4XG4gICAgICogQHBhcmFtIGtleXdvcmQgd2hldGhlciB0aGUga2V5d29yZCBvZiBhIFRFWFQgaW5kZXggc2hvdWxkIGJlIHF1ZXJpZWRcbiAgICAgKiBAcmV0dXJucyB0aGUgZnVsbCBuYW1lIG9mIHRoZSBzcGVjaWZpZWQgaW5kZXhcbiAgICAgKi9cbiAgcHVibGljIGdldEluZGV4KGRhdGFGaWVsZElkZW50aWZpZXI6IHN0cmluZywgaW5kZXg6IFNlYXJjaEluZGV4LCBrZXl3b3JkID0gZmFsc2UpOiBzdHJpbmcge1xuICAgICAgcmV0dXJuIGBkYXRhU2V0LiR7ZGF0YUZpZWxkSWRlbnRpZmllcn0uJHtpbmRleH0ke2tleXdvcmQgPyB0aGlzLktFWVdPUkQgOiAnJ31gO1xuICB9XG5cbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3RzIHRoZSBpbmRleCBuYW1lIGZvciB0aGUgc3BlY2lmaWVkIGNvcmUgZmllbGQuXG4gICAgICpcbiAgICAgKiBOb3RlIHRoYXQgYWxtb3N0IGFsbCBjb21iaW5hdGlvbnMgYXJlIHZhbGlkIGFuZCB3aWxsIG5vdCB0aHJvdyBhbiBlcnJvciB3aGVuIHVzZWQgdG8gcXVlcnkgdGhlIGRhdGFiYXNlLCBidXQgbm90IGFsbCBjb21iaW5hdGlvbnMgYXJlXG4gICAgICogdXNlZCBieSB0aGUgYXBwbGljYXRpb24gZW5naW5lLiBUaGUge0BsaW5rIFNlYXJjaEluZGV4fSBjbGFzcyBoYXMgc29tZSBpbmZvcm1hdGlvbiBhYm91dCB3aGljaCBmaWVsZCB0eXBlcyBtYXAgdG8gd2hpY2ggaW5kaWNlcywgYnV0XG4gICAgICogeW91IHNob3VsZCBjb25zdWx0IHRoZSBiYWNrZW5kIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgcmVsaWFibGUgaW5mb3JtYXRpb24uXG4gICAgICogQHBhcmFtIGluZGV4IHRoZSBxdWVyaWVkIGluZGV4XG4gICAgICogQHBhcmFtIGtleXdvcmQgd2hldGhlciB0aGUga2V5d29yZCBvZiBhIFRFWFQgaW5kZXggc2hvdWxkIGJlIHF1ZXJpZWRcbiAgICAgKiBAcmV0dXJucyB0aGUgZnVsbCBuYW1lIG9mIHRoZSBzcGVjaWZpZWQgaW5kZXhcbiAgICAgKi9cbiAgcHVibGljIGdldENvcmVJbmRleChpbmRleDogc3RyaW5nLCBrZXl3b3JkID0gZmFsc2UpOiBzdHJpbmcge1xuICAgICAgcmV0dXJuIGAke2luZGV4fSR7a2V5d29yZCA/IHRoaXMuS0VZV09SRCA6ICcnfWA7XG4gIH1cbn1cbiJdfQ==
|