igniteui-angular 15.0.0-rc.1 → 15.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/core/i18n/grid-resources.mjs +3 -2
- package/esm2020/lib/core/utils.mjs +3 -2
- package/esm2020/lib/directives/for-of/for_of.directive.mjs +4 -2
- package/esm2020/lib/grids/grid/grid.component.mjs +6 -1
- package/esm2020/lib/grids/grid-base.directive.mjs +18 -1
- package/esm2020/lib/grids/hierarchical-grid/hierarchical-grid-navigation.service.mjs +3 -2
- package/esm2020/lib/grids/hierarchical-grid/hierarchical-grid.component.mjs +3 -3
- package/esm2020/lib/grids/pivot-grid/pivot-grid-aggregate.mjs +1 -1
- package/esm2020/lib/grids/pivot-grid/pivot-grid.interface.mjs +1 -1
- package/esm2020/lib/grids/pivot-grid/pivot-util.mjs +21 -2
- package/esm2020/lib/simple-combo/simple-combo.component.mjs +3 -3
- package/fesm2015/igniteui-angular.mjs +55 -9
- package/fesm2015/igniteui-angular.mjs.map +1 -1
- package/fesm2020/igniteui-angular.mjs +54 -9
- package/fesm2020/igniteui-angular.mjs.map +1 -1
- package/lib/core/i18n/grid-resources.d.ts +1 -0
- package/lib/grids/grid-base.directive.d.ts +9 -0
- package/lib/grids/pivot-grid/pivot-grid-aggregate.d.ts +1 -5
- package/lib/grids/pivot-grid/pivot-grid.interface.d.ts +7 -1
- package/lib/grids/pivot-grid/pivot-util.d.ts +2 -0
- package/package.json +2 -2
- package/schematics/tsconfig.tsbuildinfo +1 -1
- package/schematics/utils/dependency-handler.js +24 -8
|
@@ -12,4 +12,4 @@ export var PivotDimensionType;
|
|
|
12
12
|
PivotDimensionType[PivotDimensionType["Column"] = 1] = "Column";
|
|
13
13
|
PivotDimensionType[PivotDimensionType["Filter"] = 2] = "Filter";
|
|
14
14
|
})(PivotDimensionType || (PivotDimensionType = {}));
|
|
15
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGl2b3QtZ3JpZC5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvcGl2b3QtZ3JpZC9waXZvdC1ncmlkLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFNQTs7RUFFRTtBQUNGLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHO0lBQzlCLFlBQVksRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxPQUFPO0lBQ3RGLHFCQUFxQixFQUFFLEdBQUcsRUFBRSx3QkFBd0IsRUFBRSxHQUFHO0NBQzVELENBQUM7QUErSkYsbURBQW1EO0FBQ25ELE1BQU0sQ0FBTixJQUFZLGtCQUlYO0FBSkQsV0FBWSxrQkFBa0I7SUFDMUIseURBQUcsQ0FBQTtJQUNILCtEQUFNLENBQUE7SUFDTiwrREFBTSxDQUFBO0FBQ1YsQ0FBQyxFQUpXLGtCQUFrQixLQUFsQixrQkFBa0IsUUFJN0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBHcmlkQ29sdW1uRGF0YVR5cGUgfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvZGF0YS11dGlsJztcbmltcG9ydCB7IElGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUgfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvZmlsdGVyaW5nLWV4cHJlc3Npb25zLXRyZWUnO1xuaW1wb3J0IHsgU29ydGluZ0RpcmVjdGlvbiB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9zb3J0aW5nLXN0cmF0ZWd5JztcbmltcG9ydCB7IENvbHVtblR5cGUgfSBmcm9tICcuLi9jb21tb24vZ3JpZC5pbnRlcmZhY2UnO1xuXG5cbi8qKlxuKiBEZWZhdWx0IHBpdm90IGtleXMgdXNlZCBmb3IgZGF0YSBwcm9jZXNzaW5nIGluIHRoZSBwaXZvdCBwaXBlcy5cbiovXG5leHBvcnQgY29uc3QgREVGQVVMVF9QSVZPVF9LRVlTID0ge1xuICAgIGFnZ3JlZ2F0aW9uczogJ2FnZ3JlZ2F0aW9ucycsIHJlY29yZHM6ICdyZWNvcmRzJywgY2hpbGRyZW46ICdjaGlsZHJlbicsIGxldmVsOiAnbGV2ZWwnLFxuICAgIHJvd0RpbWVuc2lvblNlcGFyYXRvcjogJ18nLCBjb2x1bW5EaW1lbnNpb25TZXBhcmF0b3I6ICctJ1xufTtcblxuXG4vKipcbiAqIEV2ZW50IGVtaXR0ZWQgd2hlbiBkaW1lbnNpb24gY29sbGVjdGlvbiBmb3Igcm93cywgY29sdW1ucyBvZiBmaWx0ZXJzIGlzIGNoYW5nZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSURpbWVuc2lvbnNDaGFuZ2Uge1xuICAgIC8qKiBUaGUgbmV3IGxpc3Qgb2YgZGltZW5zaW9ucy4gKi9cbiAgICBkaW1lbnNpb25zOiBJUGl2b3REaW1lbnNpb25bXSxcbiAgICAvKiogVGhlIGRpbWVuc2lvbiBsaXN0IHR5cGUgLSBSb3csIENvbHVtbiBvciBGaWx0ZXIuICovXG4gICAgZGltZW5zaW9uQ29sbGVjdGlvblR5cGU6IFBpdm90RGltZW5zaW9uVHlwZVxufVxuXG4vKipcbiogRXZlbnQgZW1pdHRlZCB3aGVuIHZhbHVlcyBsaXN0IGlzIGNoYW5nZWQuXG4qL1xuZXhwb3J0IGludGVyZmFjZSBJVmFsdWVzQ2hhbmdlIHtcbiAgICAvKiogVGhlIG5ldyBsaXN0IG9mIHZhbHVlcy4gKi9cbiAgICB2YWx1ZXM6IElQaXZvdFZhbHVlW11cbn1cblxuLyoqXG4qIEludGVyZmFjZSBkZXNjcmliaW5nIFBpdm90IGRhdGEgcHJvY2Vzc2luZyBmb3IgZGltZW5zaW9ucy5cbiogU2hvdWxkIGNvbnRhaW4gYSBwcm9jZXNzIG1ldGhvZCBhbmQgcmV0dXJuIHJlY29yZHMgaGllcmFyY2h5IGJhc2VkIG9uIHRoZSBwcm92aWRlZCBkaW1lbnNpb25zLlxuKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVBpdm90RGltZW5zaW9uU3RyYXRlZ3kge1xuICAgIHByb2Nlc3MoY29sbGVjdGlvbjogYW55LFxuICAgICAgICBkaW1lbnNpb25zOiBJUGl2b3REaW1lbnNpb25bXSxcbiAgICAgICAgdmFsdWVzOiBJUGl2b3RWYWx1ZVtdLFxuICAgICAgICBwaXZvdEtleXM/OiBJUGl2b3RLZXlzKTogYW55W107XG59XG5cbi8qKlxuKiBJbnRlcmZhY2UgZGVzY3JpYmluZyBhIFBpdm90QWdncmVnYXRpb24gZnVuY3Rpb24uIFxuKiBBY2NlcHRzIGFuIGFycmF5IG9mIGV4dHJhY3RlZCBkYXRhIG1lbWJlcnMgYW5kIGEgYXJyYXkgb2YgdGhlIG9yaWdpbmFsIGRhdGEgcmVjb3Jkcy5cbiovXG5leHBvcnQgdHlwZSBQaXZvdEFnZ3JlZ2F0aW9uID0gKG1lbWJlcnM6IGFueVtdLCBkYXRhOiBhbnlbXSkgPT4gYW55O1xuXG4vKipcbiogSW50ZXJmYWNlIGRlc2NyaWJpbmcgYSBJUGl2b3RBZ2dyZWdhdG9yIGNsYXNzLlxuKiBVc2VkIGZvciBzcGVjaWZ5aW5nIGN1c3RvbSBhZ2dyZWdhdG9yIGxpc3RzLlxuKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVBpdm90QWdncmVnYXRvciB7XG4gICAgLyoqIEFnZ3JlZ2F0aW9uIHVuaXF1ZSBrZXkuICovXG4gICAga2V5OiBzdHJpbmc7XG4gICAgLyoqIEFnZ3JlZ2F0aW9uIGxhYmVsIHRvIHNob3cgaW4gdGhlIFVJLiAqL1xuICAgIGxhYmVsOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQWdncmVnYXRvciBmdW5jdGlvbiBjYW4gYmUgYSBjdXN0b20gaW1wbGVtZW50YXRpb24gb2YgYFBpdm90QWdncmVnYXRpb25gLCBvciBcbiAgICAgKiB1c2UgcHJlZGVmaW5lZCBvbmVzIGZyb20gYElneFBpdm90QWdncmVnYXRlYCBhbmQgaXRzIHZhcmlhbnRzLlxuICAgICAqL1xuICAgIGFnZ3JlZ2F0b3I6IChtZW1iZXJzOiBhbnlbXSwgZGF0YT86IGFueVtdKSA9PiBhbnk7XG59XG5cbi8qKlxuKiBDb25maWd1cmF0aW9uIG9mIHRoZSBwaXZvdCBncmlkLlxuKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVBpdm90Q29uZmlndXJhdGlvbiB7XG4gICAgLyoqIEEgc3RyYXRlZ3kgdG8gdHJhbnNmb3JtIHRoZSByb3dzLiAqL1xuICAgIHJvd1N0cmF0ZWd5PzogSVBpdm90RGltZW5zaW9uU3RyYXRlZ3kgfCBudWxsO1xuICAgIC8qKiBBIHN0cmF0ZWd5IHRvIHRyYW5zZm9ybSB0aGUgY29sdW1ucy4gKi9cbiAgICBjb2x1bW5TdHJhdGVneT86IElQaXZvdERpbWVuc2lvblN0cmF0ZWd5IHwgbnVsbDtcbiAgICAvKiogQSBsaXN0IG9mIHRoZSByb3dzLiAqL1xuICAgIHJvd3M6IElQaXZvdERpbWVuc2lvbltdIHwgbnVsbDtcbiAgICAvKiogQSBsaXN0IG9mIHRoZSBjb2x1bW5zLiAqL1xuICAgIGNvbHVtbnM6IElQaXZvdERpbWVuc2lvbltdIHwgbnVsbDtcbiAgICAvKiogQSBsaXN0IG9mIHRoZSB2YWx1ZXMuICovXG4gICAgdmFsdWVzOiBJUGl2b3RWYWx1ZVtdIHwgbnVsbDtcbiAgICAvKiogRGltZW5zaW9ucyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIGZpbHRlciBhcmVhLiAqL1xuICAgIGZpbHRlcnM/OiBJUGl2b3REaW1lbnNpb25bXSB8IG51bGw7XG4gICAgLyoqIFBpdm90IGRhdGEga2V5cyB1c2VkIGZvciBkYXRhIGdlbmVyYXRpb24uIENhbiBiZSB1c2VkIGZvciBjdXN0b20gcmVtb3RlIHNjZW5hcmlvcyB3aGVyZSB0aGUgZGF0YSBpcyBwcmUtcG9wdWxhdGVkLiAqL1xuICAgIHBpdm90S2V5cz86IElQaXZvdEtleXM7XG59XG5cbi8qKlxuKiBDb25maWd1cmF0aW9uIG9mIGEgcGl2b3QgZGltZW5zaW9uLlxuKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVBpdm90RGltZW5zaW9uIHtcbiAgICAvKiogQWxsb3dzIGRlZmluaW5nIGEgaGllcmFyY2h5IHdoZW4gbXVsdGlwbGUgc3ViIGdyb3VwcyBuZWVkIHRvIGJlIGV4dHJhY3RlZCBmcm9tIHNpbmdsZSBtZW1iZXIuICovXG4gICAgY2hpbGRMZXZlbD86IElQaXZvdERpbWVuc2lvbjtcbiAgICAvKiogRmllbGQgbmFtZSB0byB1c2UgaW4gb3JkZXIgdG8gZXh0cmFjdCB2YWx1ZS4gKi9cbiAgICBtZW1iZXJOYW1lOiBzdHJpbmc7XG4gICAgLyoqIEZ1bmN0aW9uIHRoYXQgZXh0cmFjdHMgdGhlIHZhbHVlICovXG4gICAgbWVtYmVyRnVuY3Rpb24/OiAoZGF0YTogYW55KSA9PiBhbnk7XG4gICAgLyoqIEVuYWJsZXMvRGlzYWJsZXMgYSBwYXJ0aWN1bGFyIGRpbWVuc2lvbiBmcm9tIHBpdm90IHN0cnVjdHVyZS4gKi9cbiAgICBlbmFibGVkOiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIEEgcHJlZGVmaW5lZCBvciBkZWZpbmVkIHZpYSB0aGUgYGlneFBpdm90U2VsZWN0b3JgIGZpbHRlciBleHByZXNzaW9uIHRyZWUgZm9yIHRoZSBjdXJyZW50IGRpbWVuc2lvbiB0byBiZSBhcHBsaWVkIGluIHRoZSBmaWx0ZXIgcGlwZS5cbiAgICAgKiAqL1xuICAgIGZpbHRlcj86IElGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUgfCBudWxsO1xuICAgIC8qKlxuICAgICAqIFRoZSBzb3J0aW5nIGRpcmVjdGlvbiBvZiB0aGUgY3VycmVudCBkaW1lbnNpb24uIERldGVybWluZXMgdGhlIG9yZGVyIGluIHdoaWNoIHRoZSB2YWx1ZXMgd2lsbCBhcHBlYXIgaW4gdGhlIHJlbGF0ZWQgZGltZW5zaW9uLlxuICAgICAqL1xuICAgIHNvcnREaXJlY3Rpb24/OiBTb3J0aW5nRGlyZWN0aW9uO1xuICAgIC8qKlxuICAgICAqIFRoZSBkYXRhVHlwZSBvZiB0aGUgcmVsYXRlZCBkYXRhIGZpZWxkLlxuICAgICAqL1xuICAgIGRhdGFUeXBlPzogR3JpZENvbHVtbkRhdGFUeXBlO1xuICAgIC8qKiBUaGUgd2lkdGggb2YgdGhlIGRpbWVuc2lvbiBjZWxscyB0byBiZSByZW5kZXJlZC5DYW4gYmUgcGl4ZWwgb3IgJS4gKi9cbiAgICB3aWR0aD86IHN0cmluZztcbiAgICAvKiogTGV2ZWwgb2YgdGhlIGRpbWVuc2lvbi4gKi9cbiAgICBsZXZlbD86IG51bWJlcjtcbn1cbi8qKlxuKiBDb25maWd1cmF0aW9uIG9mIGEgcGl2b3QgdmFsdWUgYWdncmVnYXRpb24uXG4qL1xuZXhwb3J0IGludGVyZmFjZSBJUGl2b3RWYWx1ZSB7XG4gICAgLyoqIEZpZWxkIG5hbWUgdG8gdXNlIGluIG9yZGVyIHRvIGV4dHJhY3QgdmFsdWUuICovXG4gICAgbWVtYmVyOiBzdHJpbmc7XG4gICAgLyoqIERpc3BsYXkgbmFtZSB0byBzaG93IGluc3RlYWQgb2YgbWVtYmVyIGZvciB0aGUgY29sdW1uIGhlYWRlciBvZiB0aGlzIHZhbHVlLiAqKi9cbiAgICBkaXNwbGF5TmFtZT86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBBY3RpdmUgYWdncmVnYXRvciBkZWZpbml0aW9uIHdpdGgga2V5LCBsYWJlbCBhbmQgYWdncmVnYXRvci5cbiAgICAgKi9cbiAgICBhZ2dyZWdhdGU6IElQaXZvdEFnZ3JlZ2F0b3I7XG4gICAgLyoqXG4gICAgICogTGlzdCBvZiBhZ2dyZWdhdGVzIHRvIHNob3cgaW4gYWdncmVnYXRlIGRyb3AtZG93bi5cbiAgICAgKi9cbiAgICBhZ2dyZWdhdGVMaXN0PzogSVBpdm90QWdncmVnYXRvcltdO1xuICAgIC8qKiBFbmFibGVzL0Rpc2FibGVzIGEgcGFydGljdWxhciB2YWx1ZSBmcm9tIHBpdm90IGFnZ3JlZ2F0aW9uLiAqL1xuICAgIGVuYWJsZWQ6IGJvb2xlYW47XG4gICAgLyoqICBBbGxvdyBjb25kaXRpb25hbGx5IHN0eWxpbmcgb2YgdGhlIElneFBpdm90R3JpZCBjZWxscy4gKi9cbiAgICBzdHlsZXM/OiBhbnk7XG4gICAgLyoqIEVuYWJsZXMgYSBkYXRhIHR5cGUgc3BlY2lmaWMgdGVtcGxhdGUgb2YgdGhlIGNlbGxzICovXG4gICAgZGF0YVR5cGU/OiBHcmlkQ29sdW1uRGF0YVR5cGU7XG4gICAgLyoqIEFwcGxpZXMgZGlzcGxheSBmb3JtYXQgdG8gY2VsbCB2YWx1ZXMuICovXG4gICAgZm9ybWF0dGVyPzogKHZhbHVlOiBhbnksIHJvd0RhdGE/OiBJUGl2b3RHcmlkUmVjb3JkLCBjb2x1bW5EYXRhPzogSVBpdm90R3JpZENvbHVtbikgPT4gYW55O1xufVxuXG4vKiogSW50ZXJmYWNlIGRlc2NyaWJpbmcgdGhlIFBpdm90IGNvbHVtbiBkYXRhLlxuKiAgQ29udGFpbnMgaW5mb3JtYXRpb24gb24gdGhlIHJlbGF0ZWQgY29sdW1uIGRpbWVuc2lvbnMgYW5kIHRoZWlyIHZhbHVlcy5cbiovXG5leHBvcnQgaW50ZXJmYWNlIElQaXZvdEdyaWRDb2x1bW4ge1xuICAgICAgICBmaWVsZDogc3RyaW5nLFxuICAgICAgICAvKiogR2V0cy9TZXRzIHRoZSBncm91cCB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIHJlbGF0ZWQgY29sdW1uIGRpbWVuc2lvbiBieSBpdHMgbWVtYmVyTmFtZS4gKiovXG4gICAgICAgIGRpbWVuc2lvblZhbHVlczogTWFwPHN0cmluZywgc3RyaW5nPjtcbiAgICAgICAgLyoqIExpc3Qgb2YgZGltZW5zaW9ucyBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbHVtbi4qKi9cbiAgICAgICAgZGltZW5zaW9uczogSVBpdm90RGltZW5zaW9uW107XG4gICAgICAgIHZhbHVlOiBJUGl2b3RWYWx1ZVxufVxuXG4vKiogSW50ZXJmYWNlIGRlc2NyaWJpbmcgdGhlIFBpdm90IGRhdGEga2V5cyB1c2VkIGZvciBkYXRhIGdlbmVyYXRpb24uXG4qICBDYW4gYmUgdXNlZCBmb3IgY3VzdG9tIHJlbW90ZSBzY2VuYXJpb3Mgd2hlcmUgdGhlIGRhdGEgaXMgcHJlLXBvcHVsYXRlZC5cbiovXG5leHBvcnQgaW50ZXJmYWNlIElQaXZvdEtleXMge1xuICAgIC8qKiBGaWVsZCB0aGF0IHN0b3JlcyBjaGlsZHJlbiBmb3IgaGllcmFyY2h5IGJ1aWxkaW5nLiAqL1xuICAgIGNoaWxkcmVuOiBzdHJpbmc7XG4gICAgLyoqIEZpZWxkIHRoYXQgc3RvcmVzIHJlZmVyZW5jZSB0byB0aGUgb3JpZ2luYWwgZGF0YSByZWNvcmRzLiAqL1xuICAgIHJlY29yZHM6IHN0cmluZztcbiAgICAvKiogRmllbGQgdGhhdCBzdG9yZXMgYWdncmVnYXRpb24gdmFsdWVzLiAqL1xuICAgIGFnZ3JlZ2F0aW9uczogc3RyaW5nO1xuICAgIC8qKiBGaWVsZCB0aGF0IHN0b3JlcyBkaW1lbnNpb24gbGV2ZWwgYmFzZWQgb24gaXRzIGhpZXJhcmNoeS4gKi9cbiAgICBsZXZlbDogc3RyaW5nO1xuICAgIC8qKiBTZXBhcmF0b3IgdXNlZCB3aGVuIGdlbmVyYXRpbmcgdGhlIHVuaXF1ZSBjb2x1bW4gZmllbGQgdmFsdWVzLiAqL1xuICAgIGNvbHVtbkRpbWVuc2lvblNlcGFyYXRvcjogc3RyaW5nO1xuICAgIC8qKiBTZXBhcmF0b3IgdXNlZCB3aGVuIGdlbmVyYXRpbmcgdGhlIHVuaXF1ZSByb3cgZmllbGQgdmFsdWVzLiAqL1xuICAgIHJvd0RpbWVuc2lvblNlcGFyYXRvcjogc3RyaW5nO1xufVxuXG4vKiogVGhlIGRpbWVuc2lvbiB0eXBlcyAtIFJvdywgQ29sdW1uIG9yIEZpbHRlci4gKi9cbmV4cG9ydCBlbnVtIFBpdm90RGltZW5zaW9uVHlwZSB7XG4gICAgUm93LFxuICAgIENvbHVtbixcbiAgICBGaWx0ZXJcbn1cblxuLyoqIEludGVyZmFjZSBkZXNjcmliaW5nIHRoZSBwaXZvdCBkaW1lbnNpb24gZGF0YS5cbiogQ29udGFpbnMgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gcmVuZGVyIGRpbWVuc2lvbiBoZWFkZXJzLlxuKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVBpdm90RGltZW5zaW9uRGF0YSB7XG4gICAgLyoqIEFzc29jaWF0ZWQgY29sdW1uIGRlZmluaXRpb24uICovXG4gICAgY29sdW1uOiBDb2x1bW5UeXBlO1xuICAgIC8qKiBBc3NvY2lhdGVkIGRpbWVuc2lvbiBkZWZpbml0aW9uLiAqL1xuICAgIGRpbWVuc2lvbjogSVBpdm90RGltZW5zaW9uO1xuICAgIC8qKiBMaXN0IG9mIHByZXZpb3VzIGRpbWVuc2lvbiBncm91cHMuICovXG4gICAgcHJldkRpbWVuc2lvbnM6IElQaXZvdERpbWVuc2lvbltdO1xuICAgIC8qKiBXaGV0aGVyIHRoaXMgYSBjaGlsZCBkaW1lbnNpb24uICovXG4gICAgaXNDaGlsZD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGl2b3RSb3dIZWFkZXJHcm91cFR5cGUge1xuICAgIHJvd0luZGV4OiBudW1iZXI7XG4gICAgcGFyZW50OiBhbnk7XG4gICAgaGVhZGVyOiBhbnk7XG4gICAgaGVhZGVySUQ6IHN0cmluZztcbiAgICBncmlkOiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVBpdm90R3JpZFJlY29yZCB7XG4gICAgLyoqIEdldHMvU2V0cyB0aGUgZ3JvdXAgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIHRoZSByZWxhdGVkIHJvdyBkaW1lbnNpb24gYnkgaXRzIG1lbWJlck5hbWUuICoqL1xuICAgIGRpbWVuc2lvblZhbHVlczogTWFwPHN0cmluZywgc3RyaW5nPjtcbiAgICAvKiogR2V0cy9TZXRzIHRoZSBhZ2dyZWdhdGlvbiB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIHZhbHVlIHBhdGguIFZhbHVlIHBhdGggZGVwZW5kcyBvbiBjb25maWd1cmVkIGNvbHVtbiBkaW1lbnNpb24gaGllcmFyY2h5IGFuZCB2YWx1ZXMuKiovXG4gICAgYWdncmVnYXRpb25WYWx1ZXM6IE1hcDxzdHJpbmcsIGFueT47XG4gICAgLyoqIExpc3Qgb2YgY2hpbGRyZW4gcmVjb3JkcyBpbiBjYXNlIGFueSByb3cgZGltZW5zaW9uIG1lbWJlciBjb250YWluIGEgaGllcmFyY2h5LiBFYWNoIGRpbWVuc2lvbiBtZW1iZXIgY29udGFpbnMgaXRzIG93biBoaWVyYXJjaHksIHdoaWNoIHlvdSBjYW4gZ2V0IGJ5IGl0cyBtZW1iZXJOYW1lLiAqKi9cbiAgICBjaGlsZHJlbj86IE1hcDxzdHJpbmcsIElQaXZvdEdyaWRSZWNvcmRbXT47XG4gICAgLyoqIExpc3Qgb2Ygb3JpZ2luYWwgZGF0YSByZWNvcmRzIGFzc29jaWF0ZWQgd2l0aCB0aGUgY3VycmVudCBwaXZvdGVkIGRhdGEuICoqL1xuICAgIHJlY29yZHM/OiBhbnlbXTtcbiAgICAgLyoqIFJlY29yZCBsZXZlbCoqL1xuICAgIGxldmVsPzogbnVtYmVyO1xuICAgIC8qKiBMaXN0IG9mIGRpbWVuc2lvbnMgYXNzb2NpYXRlZCB3aXRoIHRoZSByZWNvcmQuKiovXG4gICAgZGltZW5zaW9uczogSVBpdm90RGltZW5zaW9uW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVBpdm90R3JpZEdyb3VwUmVjb3JkIGV4dGVuZHMgSVBpdm90R3JpZFJlY29yZCB7XG4gICAgaGVpZ2h0PzogbnVtYmVyO1xuICAgIHJvd1NwYW4/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSWd4UGl2b3RHcmlkVmFsdWVUZW1wbGF0ZUNvbnRleHQge1xuICAgICRpbXBsaWNpdDogSVBpdm90VmFsdWU7XG59XG4iXX0=
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGl2b3QtZ3JpZC5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvcGl2b3QtZ3JpZC9waXZvdC1ncmlkLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFNQTs7RUFFRTtBQUNGLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHO0lBQzlCLFlBQVksRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxPQUFPO0lBQ3RGLHFCQUFxQixFQUFFLEdBQUcsRUFBRSx3QkFBd0IsRUFBRSxHQUFHO0NBQzVELENBQUM7QUFvS0YsbURBQW1EO0FBQ25ELE1BQU0sQ0FBTixJQUFZLGtCQUlYO0FBSkQsV0FBWSxrQkFBa0I7SUFDMUIseURBQUcsQ0FBQTtJQUNILCtEQUFNLENBQUE7SUFDTiwrREFBTSxDQUFBO0FBQ1YsQ0FBQyxFQUpXLGtCQUFrQixLQUFsQixrQkFBa0IsUUFJN0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBHcmlkQ29sdW1uRGF0YVR5cGUgfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvZGF0YS11dGlsJztcbmltcG9ydCB7IElGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUgfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvZmlsdGVyaW5nLWV4cHJlc3Npb25zLXRyZWUnO1xuaW1wb3J0IHsgU29ydGluZ0RpcmVjdGlvbiB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9zb3J0aW5nLXN0cmF0ZWd5JztcbmltcG9ydCB7IENvbHVtblR5cGUgfSBmcm9tICcuLi9jb21tb24vZ3JpZC5pbnRlcmZhY2UnO1xuXG5cbi8qKlxuKiBEZWZhdWx0IHBpdm90IGtleXMgdXNlZCBmb3IgZGF0YSBwcm9jZXNzaW5nIGluIHRoZSBwaXZvdCBwaXBlcy5cbiovXG5leHBvcnQgY29uc3QgREVGQVVMVF9QSVZPVF9LRVlTID0ge1xuICAgIGFnZ3JlZ2F0aW9uczogJ2FnZ3JlZ2F0aW9ucycsIHJlY29yZHM6ICdyZWNvcmRzJywgY2hpbGRyZW46ICdjaGlsZHJlbicsIGxldmVsOiAnbGV2ZWwnLFxuICAgIHJvd0RpbWVuc2lvblNlcGFyYXRvcjogJ18nLCBjb2x1bW5EaW1lbnNpb25TZXBhcmF0b3I6ICctJ1xufTtcblxuXG4vKipcbiAqIEV2ZW50IGVtaXR0ZWQgd2hlbiBkaW1lbnNpb24gY29sbGVjdGlvbiBmb3Igcm93cywgY29sdW1ucyBvZiBmaWx0ZXJzIGlzIGNoYW5nZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSURpbWVuc2lvbnNDaGFuZ2Uge1xuICAgIC8qKiBUaGUgbmV3IGxpc3Qgb2YgZGltZW5zaW9ucy4gKi9cbiAgICBkaW1lbnNpb25zOiBJUGl2b3REaW1lbnNpb25bXSxcbiAgICAvKiogVGhlIGRpbWVuc2lvbiBsaXN0IHR5cGUgLSBSb3csIENvbHVtbiBvciBGaWx0ZXIuICovXG4gICAgZGltZW5zaW9uQ29sbGVjdGlvblR5cGU6IFBpdm90RGltZW5zaW9uVHlwZVxufVxuXG4vKipcbiogRXZlbnQgZW1pdHRlZCB3aGVuIHZhbHVlcyBsaXN0IGlzIGNoYW5nZWQuXG4qL1xuZXhwb3J0IGludGVyZmFjZSBJVmFsdWVzQ2hhbmdlIHtcbiAgICAvKiogVGhlIG5ldyBsaXN0IG9mIHZhbHVlcy4gKi9cbiAgICB2YWx1ZXM6IElQaXZvdFZhbHVlW11cbn1cblxuLyoqXG4qIEludGVyZmFjZSBkZXNjcmliaW5nIFBpdm90IGRhdGEgcHJvY2Vzc2luZyBmb3IgZGltZW5zaW9ucy5cbiogU2hvdWxkIGNvbnRhaW4gYSBwcm9jZXNzIG1ldGhvZCBhbmQgcmV0dXJuIHJlY29yZHMgaGllcmFyY2h5IGJhc2VkIG9uIHRoZSBwcm92aWRlZCBkaW1lbnNpb25zLlxuKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVBpdm90RGltZW5zaW9uU3RyYXRlZ3kge1xuICAgIHByb2Nlc3MoY29sbGVjdGlvbjogYW55LFxuICAgICAgICBkaW1lbnNpb25zOiBJUGl2b3REaW1lbnNpb25bXSxcbiAgICAgICAgdmFsdWVzOiBJUGl2b3RWYWx1ZVtdLFxuICAgICAgICBwaXZvdEtleXM/OiBJUGl2b3RLZXlzKTogYW55W107XG59XG5cbi8qKlxuKiBJbnRlcmZhY2UgZGVzY3JpYmluZyBhIFBpdm90QWdncmVnYXRpb24gZnVuY3Rpb24uIFxuKiBBY2NlcHRzIGFuIGFycmF5IG9mIGV4dHJhY3RlZCBkYXRhIG1lbWJlcnMgYW5kIGEgYXJyYXkgb2YgdGhlIG9yaWdpbmFsIGRhdGEgcmVjb3Jkcy5cbiovXG5leHBvcnQgdHlwZSBQaXZvdEFnZ3JlZ2F0aW9uID0gKG1lbWJlcnM6IGFueVtdLCBkYXRhOiBhbnlbXSkgPT4gYW55O1xuXG4vKipcbiogSW50ZXJmYWNlIGRlc2NyaWJpbmcgYSBJUGl2b3RBZ2dyZWdhdG9yIGNsYXNzLlxuKiBVc2VkIGZvciBzcGVjaWZ5aW5nIGN1c3RvbSBhZ2dyZWdhdG9yIGxpc3RzLlxuKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVBpdm90QWdncmVnYXRvciB7XG4gICAgLyoqIEFnZ3JlZ2F0aW9uIHVuaXF1ZSBrZXkuICovXG4gICAga2V5OiBzdHJpbmc7XG4gICAgLyoqIEFnZ3JlZ2F0aW9uIGxhYmVsIHRvIHNob3cgaW4gdGhlIFVJLiAqL1xuICAgIGxhYmVsOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQWdncmVnYXRpb24gbmFtZSB0aGF0IHdpbGwgYmUgdXNlZCBmcm9tIGEgbGlzdCBvZiBwcmVkZWZpbmVkIGFnZ3JlZ2F0aW9ucy5cbiAgICAgKiBJZiBub3Qgc2V0IHdpbGwgdXNlIHRoZSBzcGVjaWZpZWQgYWdncmVnYXRvciBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBhZ2dyZWdhdG9yTmFtZT86IFBpdm90QWdncmVnYXRpb25UeXBlO1xuICAgIC8qKlxuICAgICAqIEFnZ3JlZ2F0b3IgZnVuY3Rpb24gY2FuIGJlIGEgY3VzdG9tIGltcGxlbWVudGF0aW9uIG9mIGBQaXZvdEFnZ3JlZ2F0aW9uYCwgb3IgXG4gICAgICogdXNlIHByZWRlZmluZWQgb25lcyBmcm9tIGBJZ3hQaXZvdEFnZ3JlZ2F0ZWAgYW5kIGl0cyB2YXJpYW50cy5cbiAgICAgKi9cbiAgICBhZ2dyZWdhdG9yPzogKG1lbWJlcnM6IGFueVtdLCBkYXRhPzogYW55W10pID0+IGFueTtcbn1cblxuLyoqXG4qIENvbmZpZ3VyYXRpb24gb2YgdGhlIHBpdm90IGdyaWQuXG4qL1xuZXhwb3J0IGludGVyZmFjZSBJUGl2b3RDb25maWd1cmF0aW9uIHtcbiAgICAvKiogQSBzdHJhdGVneSB0byB0cmFuc2Zvcm0gdGhlIHJvd3MuICovXG4gICAgcm93U3RyYXRlZ3k/OiBJUGl2b3REaW1lbnNpb25TdHJhdGVneSB8IG51bGw7XG4gICAgLyoqIEEgc3RyYXRlZ3kgdG8gdHJhbnNmb3JtIHRoZSBjb2x1bW5zLiAqL1xuICAgIGNvbHVtblN0cmF0ZWd5PzogSVBpdm90RGltZW5zaW9uU3RyYXRlZ3kgfCBudWxsO1xuICAgIC8qKiBBIGxpc3Qgb2YgdGhlIHJvd3MuICovXG4gICAgcm93czogSVBpdm90RGltZW5zaW9uW10gfCBudWxsO1xuICAgIC8qKiBBIGxpc3Qgb2YgdGhlIGNvbHVtbnMuICovXG4gICAgY29sdW1uczogSVBpdm90RGltZW5zaW9uW10gfCBudWxsO1xuICAgIC8qKiBBIGxpc3Qgb2YgdGhlIHZhbHVlcy4gKi9cbiAgICB2YWx1ZXM6IElQaXZvdFZhbHVlW10gfCBudWxsO1xuICAgIC8qKiBEaW1lbnNpb25zIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgZmlsdGVyIGFyZWEuICovXG4gICAgZmlsdGVycz86IElQaXZvdERpbWVuc2lvbltdIHwgbnVsbDtcbiAgICAvKiogUGl2b3QgZGF0YSBrZXlzIHVzZWQgZm9yIGRhdGEgZ2VuZXJhdGlvbi4gQ2FuIGJlIHVzZWQgZm9yIGN1c3RvbSByZW1vdGUgc2NlbmFyaW9zIHdoZXJlIHRoZSBkYXRhIGlzIHByZS1wb3B1bGF0ZWQuICovXG4gICAgcGl2b3RLZXlzPzogSVBpdm90S2V5cztcbn1cblxuLyoqXG4qIENvbmZpZ3VyYXRpb24gb2YgYSBwaXZvdCBkaW1lbnNpb24uXG4qL1xuZXhwb3J0IGludGVyZmFjZSBJUGl2b3REaW1lbnNpb24ge1xuICAgIC8qKiBBbGxvd3MgZGVmaW5pbmcgYSBoaWVyYXJjaHkgd2hlbiBtdWx0aXBsZSBzdWIgZ3JvdXBzIG5lZWQgdG8gYmUgZXh0cmFjdGVkIGZyb20gc2luZ2xlIG1lbWJlci4gKi9cbiAgICBjaGlsZExldmVsPzogSVBpdm90RGltZW5zaW9uO1xuICAgIC8qKiBGaWVsZCBuYW1lIHRvIHVzZSBpbiBvcmRlciB0byBleHRyYWN0IHZhbHVlLiAqL1xuICAgIG1lbWJlck5hbWU6IHN0cmluZztcbiAgICAvKiogRnVuY3Rpb24gdGhhdCBleHRyYWN0cyB0aGUgdmFsdWUgKi9cbiAgICBtZW1iZXJGdW5jdGlvbj86IChkYXRhOiBhbnkpID0+IGFueTtcbiAgICAvKiogRW5hYmxlcy9EaXNhYmxlcyBhIHBhcnRpY3VsYXIgZGltZW5zaW9uIGZyb20gcGl2b3Qgc3RydWN0dXJlLiAqL1xuICAgIGVuYWJsZWQ6IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogQSBwcmVkZWZpbmVkIG9yIGRlZmluZWQgdmlhIHRoZSBgaWd4UGl2b3RTZWxlY3RvcmAgZmlsdGVyIGV4cHJlc3Npb24gdHJlZSBmb3IgdGhlIGN1cnJlbnQgZGltZW5zaW9uIHRvIGJlIGFwcGxpZWQgaW4gdGhlIGZpbHRlciBwaXBlLlxuICAgICAqICovXG4gICAgZmlsdGVyPzogSUZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSB8IG51bGw7XG4gICAgLyoqXG4gICAgICogVGhlIHNvcnRpbmcgZGlyZWN0aW9uIG9mIHRoZSBjdXJyZW50IGRpbWVuc2lvbi4gRGV0ZXJtaW5lcyB0aGUgb3JkZXIgaW4gd2hpY2ggdGhlIHZhbHVlcyB3aWxsIGFwcGVhciBpbiB0aGUgcmVsYXRlZCBkaW1lbnNpb24uXG4gICAgICovXG4gICAgc29ydERpcmVjdGlvbj86IFNvcnRpbmdEaXJlY3Rpb247XG4gICAgLyoqXG4gICAgICogVGhlIGRhdGFUeXBlIG9mIHRoZSByZWxhdGVkIGRhdGEgZmllbGQuXG4gICAgICovXG4gICAgZGF0YVR5cGU/OiBHcmlkQ29sdW1uRGF0YVR5cGU7XG4gICAgLyoqIFRoZSB3aWR0aCBvZiB0aGUgZGltZW5zaW9uIGNlbGxzIHRvIGJlIHJlbmRlcmVkLkNhbiBiZSBwaXhlbCBvciAlLiAqL1xuICAgIHdpZHRoPzogc3RyaW5nO1xuICAgIC8qKiBMZXZlbCBvZiB0aGUgZGltZW5zaW9uLiAqL1xuICAgIGxldmVsPzogbnVtYmVyO1xufVxuLyoqXG4qIENvbmZpZ3VyYXRpb24gb2YgYSBwaXZvdCB2YWx1ZSBhZ2dyZWdhdGlvbi5cbiovXG5leHBvcnQgaW50ZXJmYWNlIElQaXZvdFZhbHVlIHtcbiAgICAvKiogRmllbGQgbmFtZSB0byB1c2UgaW4gb3JkZXIgdG8gZXh0cmFjdCB2YWx1ZS4gKi9cbiAgICBtZW1iZXI6IHN0cmluZztcbiAgICAvKiogRGlzcGxheSBuYW1lIHRvIHNob3cgaW5zdGVhZCBvZiBtZW1iZXIgZm9yIHRoZSBjb2x1bW4gaGVhZGVyIG9mIHRoaXMgdmFsdWUuICoqL1xuICAgIGRpc3BsYXlOYW1lPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEFjdGl2ZSBhZ2dyZWdhdG9yIGRlZmluaXRpb24gd2l0aCBrZXksIGxhYmVsIGFuZCBhZ2dyZWdhdG9yLlxuICAgICAqL1xuICAgIGFnZ3JlZ2F0ZTogSVBpdm90QWdncmVnYXRvcjtcbiAgICAvKipcbiAgICAgKiBMaXN0IG9mIGFnZ3JlZ2F0ZXMgdG8gc2hvdyBpbiBhZ2dyZWdhdGUgZHJvcC1kb3duLlxuICAgICAqL1xuICAgIGFnZ3JlZ2F0ZUxpc3Q/OiBJUGl2b3RBZ2dyZWdhdG9yW107XG4gICAgLyoqIEVuYWJsZXMvRGlzYWJsZXMgYSBwYXJ0aWN1bGFyIHZhbHVlIGZyb20gcGl2b3QgYWdncmVnYXRpb24uICovXG4gICAgZW5hYmxlZDogYm9vbGVhbjtcbiAgICAvKiogIEFsbG93IGNvbmRpdGlvbmFsbHkgc3R5bGluZyBvZiB0aGUgSWd4UGl2b3RHcmlkIGNlbGxzLiAqL1xuICAgIHN0eWxlcz86IGFueTtcbiAgICAvKiogRW5hYmxlcyBhIGRhdGEgdHlwZSBzcGVjaWZpYyB0ZW1wbGF0ZSBvZiB0aGUgY2VsbHMgKi9cbiAgICBkYXRhVHlwZT86IEdyaWRDb2x1bW5EYXRhVHlwZTtcbiAgICAvKiogQXBwbGllcyBkaXNwbGF5IGZvcm1hdCB0byBjZWxsIHZhbHVlcy4gKi9cbiAgICBmb3JtYXR0ZXI/OiAodmFsdWU6IGFueSwgcm93RGF0YT86IElQaXZvdEdyaWRSZWNvcmQsIGNvbHVtbkRhdGE/OiBJUGl2b3RHcmlkQ29sdW1uKSA9PiBhbnk7XG59XG5cbi8qKiBJbnRlcmZhY2UgZGVzY3JpYmluZyB0aGUgUGl2b3QgY29sdW1uIGRhdGEuXG4qICBDb250YWlucyBpbmZvcm1hdGlvbiBvbiB0aGUgcmVsYXRlZCBjb2x1bW4gZGltZW5zaW9ucyBhbmQgdGhlaXIgdmFsdWVzLlxuKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVBpdm90R3JpZENvbHVtbiB7XG4gICAgICAgIGZpZWxkOiBzdHJpbmcsXG4gICAgICAgIC8qKiBHZXRzL1NldHMgdGhlIGdyb3VwIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVsYXRlZCBjb2x1bW4gZGltZW5zaW9uIGJ5IGl0cyBtZW1iZXJOYW1lLiAqKi9cbiAgICAgICAgZGltZW5zaW9uVmFsdWVzOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xuICAgICAgICAvKiogTGlzdCBvZiBkaW1lbnNpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGUgY29sdW1uLioqL1xuICAgICAgICBkaW1lbnNpb25zOiBJUGl2b3REaW1lbnNpb25bXTtcbiAgICAgICAgdmFsdWU6IElQaXZvdFZhbHVlXG59XG5cbi8qKiBJbnRlcmZhY2UgZGVzY3JpYmluZyB0aGUgUGl2b3QgZGF0YSBrZXlzIHVzZWQgZm9yIGRhdGEgZ2VuZXJhdGlvbi5cbiogIENhbiBiZSB1c2VkIGZvciBjdXN0b20gcmVtb3RlIHNjZW5hcmlvcyB3aGVyZSB0aGUgZGF0YSBpcyBwcmUtcG9wdWxhdGVkLlxuKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVBpdm90S2V5cyB7XG4gICAgLyoqIEZpZWxkIHRoYXQgc3RvcmVzIGNoaWxkcmVuIGZvciBoaWVyYXJjaHkgYnVpbGRpbmcuICovXG4gICAgY2hpbGRyZW46IHN0cmluZztcbiAgICAvKiogRmllbGQgdGhhdCBzdG9yZXMgcmVmZXJlbmNlIHRvIHRoZSBvcmlnaW5hbCBkYXRhIHJlY29yZHMuICovXG4gICAgcmVjb3Jkczogc3RyaW5nO1xuICAgIC8qKiBGaWVsZCB0aGF0IHN0b3JlcyBhZ2dyZWdhdGlvbiB2YWx1ZXMuICovXG4gICAgYWdncmVnYXRpb25zOiBzdHJpbmc7XG4gICAgLyoqIEZpZWxkIHRoYXQgc3RvcmVzIGRpbWVuc2lvbiBsZXZlbCBiYXNlZCBvbiBpdHMgaGllcmFyY2h5LiAqL1xuICAgIGxldmVsOiBzdHJpbmc7XG4gICAgLyoqIFNlcGFyYXRvciB1c2VkIHdoZW4gZ2VuZXJhdGluZyB0aGUgdW5pcXVlIGNvbHVtbiBmaWVsZCB2YWx1ZXMuICovXG4gICAgY29sdW1uRGltZW5zaW9uU2VwYXJhdG9yOiBzdHJpbmc7XG4gICAgLyoqIFNlcGFyYXRvciB1c2VkIHdoZW4gZ2VuZXJhdGluZyB0aGUgdW5pcXVlIHJvdyBmaWVsZCB2YWx1ZXMuICovXG4gICAgcm93RGltZW5zaW9uU2VwYXJhdG9yOiBzdHJpbmc7XG59XG5cbi8qKiBUaGUgZGltZW5zaW9uIHR5cGVzIC0gUm93LCBDb2x1bW4gb3IgRmlsdGVyLiAqL1xuZXhwb3J0IGVudW0gUGl2b3REaW1lbnNpb25UeXBlIHtcbiAgICBSb3csXG4gICAgQ29sdW1uLFxuICAgIEZpbHRlclxufVxuXG5leHBvcnQgdHlwZSBQaXZvdEFnZ3JlZ2F0aW9uVHlwZSA9ICdTVU0nIHwgJ0FWRycgfCAnTUlOJyB8ICdNQVgnIHwgJ0NPVU5UJyB8ICdMQVRFU1QnIHwgJ0VBUkxJRVNUJyA7XG5cbi8qKiBJbnRlcmZhY2UgZGVzY3JpYmluZyB0aGUgcGl2b3QgZGltZW5zaW9uIGRhdGEuXG4qIENvbnRhaW5zIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gbmVlZGVkIHRvIHJlbmRlciBkaW1lbnNpb24gaGVhZGVycy5cbiovXG5leHBvcnQgaW50ZXJmYWNlIElQaXZvdERpbWVuc2lvbkRhdGEge1xuICAgIC8qKiBBc3NvY2lhdGVkIGNvbHVtbiBkZWZpbml0aW9uLiAqL1xuICAgIGNvbHVtbjogQ29sdW1uVHlwZTtcbiAgICAvKiogQXNzb2NpYXRlZCBkaW1lbnNpb24gZGVmaW5pdGlvbi4gKi9cbiAgICBkaW1lbnNpb246IElQaXZvdERpbWVuc2lvbjtcbiAgICAvKiogTGlzdCBvZiBwcmV2aW91cyBkaW1lbnNpb24gZ3JvdXBzLiAqL1xuICAgIHByZXZEaW1lbnNpb25zOiBJUGl2b3REaW1lbnNpb25bXTtcbiAgICAvKiogV2hldGhlciB0aGlzIGEgY2hpbGQgZGltZW5zaW9uLiAqL1xuICAgIGlzQ2hpbGQ/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBpdm90Um93SGVhZGVyR3JvdXBUeXBlIHtcbiAgICByb3dJbmRleDogbnVtYmVyO1xuICAgIHBhcmVudDogYW55O1xuICAgIGhlYWRlcjogYW55O1xuICAgIGhlYWRlcklEOiBzdHJpbmc7XG4gICAgZ3JpZDogYW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElQaXZvdEdyaWRSZWNvcmQge1xuICAgIC8qKiBHZXRzL1NldHMgdGhlIGdyb3VwIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVsYXRlZCByb3cgZGltZW5zaW9uIGJ5IGl0cyBtZW1iZXJOYW1lLiAqKi9cbiAgICBkaW1lbnNpb25WYWx1ZXM6IE1hcDxzdHJpbmcsIHN0cmluZz47XG4gICAgLyoqIEdldHMvU2V0cyB0aGUgYWdncmVnYXRpb24gdmFsdWUgYXNzb2NpYXRlZCB3aXRoIHRoZSB2YWx1ZSBwYXRoLiBWYWx1ZSBwYXRoIGRlcGVuZHMgb24gY29uZmlndXJlZCBjb2x1bW4gZGltZW5zaW9uIGhpZXJhcmNoeSBhbmQgdmFsdWVzLioqL1xuICAgIGFnZ3JlZ2F0aW9uVmFsdWVzOiBNYXA8c3RyaW5nLCBhbnk+O1xuICAgIC8qKiBMaXN0IG9mIGNoaWxkcmVuIHJlY29yZHMgaW4gY2FzZSBhbnkgcm93IGRpbWVuc2lvbiBtZW1iZXIgY29udGFpbiBhIGhpZXJhcmNoeS4gRWFjaCBkaW1lbnNpb24gbWVtYmVyIGNvbnRhaW5zIGl0cyBvd24gaGllcmFyY2h5LCB3aGljaCB5b3UgY2FuIGdldCBieSBpdHMgbWVtYmVyTmFtZS4gKiovXG4gICAgY2hpbGRyZW4/OiBNYXA8c3RyaW5nLCBJUGl2b3RHcmlkUmVjb3JkW10+O1xuICAgIC8qKiBMaXN0IG9mIG9yaWdpbmFsIGRhdGEgcmVjb3JkcyBhc3NvY2lhdGVkIHdpdGggdGhlIGN1cnJlbnQgcGl2b3RlZCBkYXRhLiAqKi9cbiAgICByZWNvcmRzPzogYW55W107XG4gICAgIC8qKiBSZWNvcmQgbGV2ZWwqKi9cbiAgICBsZXZlbD86IG51bWJlcjtcbiAgICAvKiogTGlzdCBvZiBkaW1lbnNpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVjb3JkLioqL1xuICAgIGRpbWVuc2lvbnM6IElQaXZvdERpbWVuc2lvbltdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElQaXZvdEdyaWRHcm91cFJlY29yZCBleHRlbmRzIElQaXZvdEdyaWRSZWNvcmQge1xuICAgIGhlaWdodD86IG51bWJlcjtcbiAgICByb3dTcGFuPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElneFBpdm90R3JpZFZhbHVlVGVtcGxhdGVDb250ZXh0IHtcbiAgICAkaW1wbGljaXQ6IElQaXZvdFZhbHVlO1xufVxuIl19
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { CurrentResourceStrings } from '../../core/i18n/resources';
|
|
1
2
|
import { cloneValue } from '../../core/utils';
|
|
2
3
|
import { DataUtil, GridColumnDataType } from '../../data-operations/data-util';
|
|
3
4
|
import { FilteringLogic } from '../../data-operations/filtering-expression.interface';
|
|
@@ -212,10 +213,28 @@ export class PivotUtil {
|
|
|
212
213
|
static aggregate(records, values) {
|
|
213
214
|
const result = {};
|
|
214
215
|
for (const pivotValue of values) {
|
|
215
|
-
|
|
216
|
+
const aggregator = PivotUtil.getAggregatorForType(pivotValue.aggregate, pivotValue.dataType);
|
|
217
|
+
if (!aggregator) {
|
|
218
|
+
throw CurrentResourceStrings.GridResStrings.igx_grid_pivot_no_aggregator.replace("{0}", pivotValue.member);
|
|
219
|
+
}
|
|
220
|
+
result[pivotValue.member] = aggregator(records.map(r => r[pivotValue.member]), records);
|
|
216
221
|
}
|
|
217
222
|
return result;
|
|
218
223
|
}
|
|
224
|
+
static getAggregatorForType(aggregate, dataType) {
|
|
225
|
+
let aggregator = aggregate.aggregator;
|
|
226
|
+
if (aggregate.aggregatorName) {
|
|
227
|
+
let aggregators = IgxPivotNumericAggregate.aggregators();
|
|
228
|
+
if (!dataType || dataType === 'date' || dataType === 'dateTime') {
|
|
229
|
+
aggregators = aggregators.concat(IgxPivotDateAggregate.aggregators());
|
|
230
|
+
}
|
|
231
|
+
else if (dataType === 'time') {
|
|
232
|
+
aggregators = aggregators.concat(IgxPivotTimeAggregate.aggregators());
|
|
233
|
+
}
|
|
234
|
+
aggregator = aggregators.find(x => x.key === aggregate.aggregatorName)?.aggregator;
|
|
235
|
+
}
|
|
236
|
+
return aggregator;
|
|
237
|
+
}
|
|
219
238
|
static processHierarchy(hierarchies, pivotKeys, level = 0, rootData = false) {
|
|
220
239
|
const flatData = [];
|
|
221
240
|
hierarchies.forEach((h, key) => {
|
|
@@ -363,4 +382,4 @@ export class PivotUtil {
|
|
|
363
382
|
}
|
|
364
383
|
}
|
|
365
384
|
}
|
|
366
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGl2b3QtdXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9ncmlkcy9waXZvdC1ncmlkL3Bpdm90LXV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxRQUFRLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDdEYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFHNUYsT0FBTyxFQUF3QixVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN0RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUscUJBQXFCLEVBQUUsd0JBQXdCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNuSSxPQUFPLEVBQXFHLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFL0osTUFBTSxPQUFPLFNBQVM7SUFFbEIsa0VBQWtFO0lBQzNELE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBd0IsRUFBRSxTQUEwQixFQUFFLFNBQXFCO1FBQ25HLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxFQUFFO1lBQ3BCLDRCQUE0QjtZQUM1QixJQUFJLEdBQUcsQ0FBQyxRQUFRLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxFQUFFO2dCQUN2Qyw0QkFBNEI7Z0JBQzVCLEdBQUcsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFO29CQUNqQyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7Z0JBQ3JELENBQUMsQ0FBQyxDQUFD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QUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQzthQUN0QztpQkFBTSxJQUFJLENBQUMsU0FBUyxFQUFFO2dCQUNuQixnRUFBZ0U7Z0JBQ2hFLHdFQUF3RTtnQkFDeEUsNkJBQTZCO2dCQUM3QixXQUFXLEdBQUcsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDakM7WUFDRCxHQUFHLENBQUMsYUFBYSxHQUFHLFdBQVcsQ0FBQztTQUNuQztRQUNELE9BQU8sR0FBRyxDQUFDLGFBQWEsQ0FBQztJQUM3QixDQUFDO0lBRU0sTUFBTSxDQUFDLHNCQUFzQixDQUFDLEtBQWtCLEVBQUUsSUFBbUI7UUFDeEUsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUNyRixRQUFRLFFBQVEsRUFBRTtZQUNkLEtBQUssa0JBQWtCLENBQUMsTUFBTSxDQUFDO1lBQy9CLEtBQUssa0JBQWtCLENBQUMsUUFBUTtnQkFDNUIsT0FBTyx3QkFBd0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNsRCxLQUFLLGtCQUFrQixDQUFDLElBQUksQ0FBQztZQUM3QixLQUFLLGtCQUFrQixDQUFDLFFBQVE7Z0JBQzVCLE9BQU8scUJBQXFCLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDL0MsS0FBSyxrQkFBa0IsQ0FBQyxJQUFJO2dCQUN4QixPQUFPLHFCQUFxQixDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQy9DO2dCQUNJLE9BQU8saUJBQWlCLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDOUM7SUFDTCxDQUFDO0NBR0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjbG9uZVZhbHVlIH0gZnJvbSAnLi4vLi4vY29yZS91dGlscyc7XG5pbXBvcnQgeyBEYXRhVXRpbCwgR3JpZENvbHVtbkRhdGFUeXBlIH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL2RhdGEtdXRpbCc7XG5pbXBvcnQgeyBGaWx0ZXJpbmdMb2dpYyB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9maWx0ZXJpbmctZXhwcmVzc2lvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlIH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL2ZpbHRlcmluZy1leHByZXNzaW9ucy10cmVlJztcbmltcG9ydCB7IElTb3J0aW5nRXhwcmVzc2lvbiB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9zb3J0aW5nLXN0cmF0ZWd5JztcbmltcG9ydCB7IFBpdm90R3JpZFR5cGUgfSBmcm9tICcuLi9jb21tb24vZ3JpZC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSUdyaWRTb3J0aW5nU3RyYXRlZ3ksIElneFNvcnRpbmcgfSBmcm9tICcuLi9jb21tb24vc3RyYXRlZ3knO1xuaW1wb3J0IHsgSWd4UGl2b3RBZ2dyZWdhdGUsIElneFBpdm90RGF0ZUFnZ3JlZ2F0ZSwgSWd4UGl2b3ROdW1lcmljQWdncmVnYXRlLCBJZ3hQaXZvdFRpbWVBZ2dyZWdhdGUgfSBmcm9tICcuL3Bpdm90LWdyaWQtYWdncmVnYXRlJztcbmltcG9ydCB7IElQaXZvdEFnZ3JlZ2F0b3IsIElQaXZvdENvbmZpZ3VyYXRpb24sIElQaXZvdERpbWVuc2lvbiwgSVBpdm90R3JpZFJlY29yZCwgSVBpdm90S2V5cywgSVBpdm90VmFsdWUsIFBpdm90RGltZW5zaW9uVHlwZSB9IGZyb20gJy4vcGl2b3QtZ3JpZC5pbnRlcmZhY2UnO1xuXG5leHBvcnQgY2xhc3MgUGl2b3RVdGlsIHtcblxuICAgIC8vIGdvIHRocm91Z2ggYWxsIGNoaWxkcmVuIGFuZCBhcHBseSBuZXcgZGltZW5zaW9uIGdyb3VwcyBhcyBjaGlsZFxuICAgIHB1YmxpYyBzdGF0aWMgcHJvY2Vzc0dyb3VwcyhyZWNzOiBJUGl2b3RHcmlkUmVjb3JkW10sIGRpbWVuc2lvbjogSVBpdm90RGltZW5zaW9uLCBwaXZvdEtleXM6IElQaXZvdEtleXMpIHtcbiAgICAgICAgZm9yIChjb25zdCByZWMgb2YgcmVjcykge1xuICAgICAgICAgICAgLy8gcHJvY2VzcyBleGlzdGluZyBjaGlsZHJlblxuICAgICAgICAgICAgaWYgKHJlYy5jaGlsZHJlbiAmJiByZWMuY2hpbGRyZW4uc2l6ZSA+IDApIHtcbiAgICAgICAgICAgICAgICAvLyBwcm9jZXNzIGhpZXJhcmNoeSBpbiBkZXB0XG4gICAgICAgICAgICAgICAgcmVjLmNoaWxkcmVuLmZvckVhY2goKHZhbHVlcywga2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc0dyb3Vwcyh2YWx1ZXMsIGRpbWVuc2lvbiwgcGl2b3RLZXlzKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGFkZCBjaGlsZHJlbiBmb3IgY3VycmVudCBkaW1lbnNpb25cbiAgICAgICAgICAgIGNvbnN0IGhpZXJhcmNoeUZpZWxkcyA9IFBpdm90VXRpbFxuICAgICAgICAgICAgICAgIC5nZXRGaWVsZHNIaWVyYXJjaHkocmVjLnJlY29yZHMsIFtkaW1lbnNpb25dLCBQaXZvdERpbWVuc2lvblR5cGUuUm93LCBwaXZvdEtleXMpO1xuICAgICAgICAgICAgY29uc3QgdmFsdWVzID0gQXJyYXkuZnJvbShoaWVyYXJjaHlGaWVsZHMudmFsdWVzKCkpLmZpbmQoeCA9PiB4LmRpbWVuc2lvbi5tZW1iZXJOYW1lID09PSBkaW1lbnNpb24ubWVtYmVyTmFtZSk7XG4gICAgICAgICAgICBjb25zdCBzaWJsaW5nRGF0YSA9IFBpdm90VXRpbFxuICAgICAgICAgICAgICAgIC5wcm9jZXNzSGllcmFyY2h5KGhpZXJhcmNoeUZpZWxkcywgcGl2b3RLZXlzLCAwKTtcbiAgICAgICAgICAgIHJlYy5jaGlsZHJlbi5zZXQoZGltZW5zaW9uLm1lbWJlck5hbWUsIHNpYmxpbmdEYXRhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZmxhdHRlbkdyb3VwcyhkYXRhOiBJUGl2b3RHcmlkUmVjb3JkW10sIGRpbWVuc2lvbjogSVBpdm90RGltZW5zaW9uLCBleHBhbnNpb25TdGF0ZXMsIGRlZmF1bHRFeHBhbmQ6IGJvb2xlYW4sIHBhcmVudD86IElQaXZvdERpbWVuc2lvbiwgcGFyZW50UmVjPzogSVBpdm90R3JpZFJlY29yZCkge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHJlYyA9IGRhdGFbaV07XG4gICAgICAgICAgICBjb25zdCBmaWVsZCA9IGRpbWVuc2lvbi5tZW1iZXJOYW1lO1xuICAgICAgICAgICAgaWYgKCFmaWVsZCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgcmVjb3Jkc0RhdGEgPSByZWMuY2hpbGRyZW4uZ2V0KGZpZWxkKTtcbiAgICAgICAgICAgIGlmICghcmVjb3Jkc0RhdGEgJiYgcGFyZW50KSB7XG4gICAgICAgICAgICAgICAgLy8gY2hlY2sgcGFyZW50XG4gICAgICAgICAgICAgICAgcmVjb3Jkc0RhdGEgPSByZWMuY2hpbGRyZW4uZ2V0KHBhcmVudC5tZW1iZXJOYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAocmVjb3Jkc0RhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgZGltZW5zaW9uID0gcGFyZW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHBhcmVudFJlYykge1xuICAgICAgICAgICAgICAgIHBhcmVudFJlYy5kaW1lbnNpb25WYWx1ZXMuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50Lm1lbWJlck5hbWUgIT09IGtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVjLmRpbWVuc2lvblZhbHVlcy5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkaW0gPSBwYXJlbnRSZWMuZGltZW5zaW9ucy5maW5kKHggPT4geC5tZW1iZXJOYW1lID09PSBrZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVjLmRpbWVuc2lvbnMudW5zaGlmdChkaW0pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICBjb25zdCBleHBhbnNpb25Sb3dLZXkgPSBQaXZvdFV0aWwuZ2V0UmVjb3JkS2V5KHJlYywgZGltZW5zaW9uKTtcbiAgICAgICAgICAgIGNvbnN0IGlzRXhwYW5kZWQgPSBleHBhbnNpb25TdGF0ZXMuZ2V0KGV4cGFuc2lvblJvd0tleSkgPT09IHVuZGVmaW5lZCA/XG4gICAgICAgICAgICAgICAgZGVmYXVsdEV4cGFuZCA6XG4gICAgICAgICAgICAgICAgZXhwYW5zaW9uU3RhdGVzLmdldChleHBhbnNpb25Sb3dLZXkpO1xuICAgICAgICAgICAgY29uc3Qgc2hvdWxkRXhwYW5kID0gaXNFeHBhbmRlZCB8fCAhZGltZW5zaW9uLmNoaWxkTGV2ZWwgfHwgIXJlYy5kaW1lbnNpb25WYWx1ZXMuZ2V0KGRpbWVuc2lvbi5tZW1iZXJOYW1lKTtcbiAgICAgICAgICAgIGlmIChzaG91bGRFeHBhbmQgJiYgcmVjb3Jkc0RhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGltZW5zaW9uLmNoaWxkTGV2ZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mbGF0dGVuR3JvdXBzKHJlY29yZHNEYXRhLCBkaW1lbnNpb24uY2hpbGRMZXZlbCwgZXhwYW5zaW9uU3RhdGVzLCBkZWZhdWx0RXhwYW5kLCBkaW1lbnNpb24sIHJlYyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gY29weSBwYXJlbnQgdmFsdWVzIGFuZCBkaW1zIGluIGNoaWxkXG4gICAgICAgICAgICAgICAgICAgIHJlY29yZHNEYXRhLmZvckVhY2goeCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWMuZGltZW5zaW9uVmFsdWVzLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGltZW5zaW9uLm1lbWJlck5hbWUgIT09IGtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LmRpbWVuc2lvblZhbHVlcy5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRpbSA9IHJlYy5kaW1lbnNpb25zLmZpbmQoeSA9PiB5Lm1lbWJlck5hbWUgPT09IGtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHguZGltZW5zaW9ucy51bnNoaWZ0KGRpbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZGF0YS5zcGxpY2UoaSArIDEsIDAsIC4uLnJlY29yZHNEYXRhKTtcbiAgICAgICAgICAgICAgICBpICs9IHJlY29yZHNEYXRhLmxlbmd0aDtcblxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHB1YmxpYyBzdGF0aWMgYXNzaWduTGV2ZWxzKGRpbXMpIHtcbiAgICAgICAgZm9yIChjb25zdCBkaW0gb2YgZGltcykge1xuICAgICAgICAgICAgbGV0IGN1cnJEaW0gPSBkaW07XG4gICAgICAgICAgICBsZXQgbHZsID0gMDtcbiAgICAgICAgICAgIHdoaWxlIChjdXJyRGltLmNoaWxkTGV2ZWwpIHtcbiAgICAgICAgICAgICAgICBjdXJyRGltLmxldmVsID0gbHZsO1xuICAgICAgICAgICAgICAgIGN1cnJEaW0gPSBjdXJyRGltLmNoaWxkTGV2ZWw7XG4gICAgICAgICAgICAgICAgbHZsKys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjdXJyRGltLmxldmVsID0gbHZsO1xuICAgICAgICB9XG4gICAgfVxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0RmllbGRzSGllcmFyY2h5KGRhdGE6IGFueVtdLCBkaW1lbnNpb25zOiBJUGl2b3REaW1lbnNpb25bXSxcbiAgICAgICAgZGltZW5zaW9uVHlwZTogUGl2b3REaW1lbnNpb25UeXBlLCBwaXZvdEtleXM6IElQaXZvdEtleXMpOiBNYXA8c3RyaW5nLCBhbnk+IHtcbiAgICAgICAgY29uc3QgaGllcmFyY2h5ID0gbmV3IE1hcDxzdHJpbmcsIGFueT4oKTtcbiAgICAgICAgZm9yIChjb25zdCByZWMgb2YgZGF0YSkge1xuICAgICAgICAgICAgY29uc3QgdmFscyA9IGRpbWVuc2lvblR5cGUgPT09IFBpdm90RGltZW5zaW9uVHlwZS5Db2x1bW4gP1xuICAgICAgICAgICAgICAgIHRoaXMuZXh0cmFjdFZhbHVlc0ZvckNvbHVtbihkaW1lbnNpb25zLCByZWMsIHBpdm90S2V5cykgOlxuICAgICAgICAgICAgICAgIHRoaXMuZXh0cmFjdFZhbHVlc0ZvclJvdyhkaW1lbnNpb25zLCByZWMsIHBpdm90S2V5cyk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgdmFscykgeyAvLyB0aGlzIHNob3VsZCBnbyBpbiBkZXB0aCBhbHNvIHZhbHMuY2hpbGRyZW5cbiAgICAgICAgICAgICAgICBpZiAoaGllcmFyY2h5LmdldCh2YWwudmFsdWUpICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHBseUhpZXJhcmNoeUNoaWxkcmVuKGhpZXJhcmNoeSwgdmFsLCByZWMsIHBpdm90S2V5cyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaGllcmFyY2h5LnNldCh2YWwudmFsdWUsIGNsb25lVmFsdWUodmFsKSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXBwbHlIaWVyYXJjaHlDaGlsZHJlbihoaWVyYXJjaHksIHZhbCwgcmVjLCBwaXZvdEtleXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaGllcmFyY2h5O1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgc29ydChkYXRhOiBJUGl2b3RHcmlkUmVjb3JkW10sIGV4cHJlc3Npb25zOiBJU29ydGluZ0V4cHJlc3Npb25bXSwgc29ydGluZzogSUdyaWRTb3J0aW5nU3RyYXRlZ3kgPSBuZXcgSWd4U29ydGluZygpKTogYW55W10ge1xuICAgICAgICBkYXRhLmZvckVhY2gocmVjID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gcmVjLmNoaWxkcmVuO1xuICAgICAgICAgICAgaWYgKGNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgY2hpbGRyZW4uZm9yRWFjaCh4ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zb3J0KHgsIGV4cHJlc3Npb25zLCBzb3J0aW5nKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBEYXRhVXRpbC5zb3J0KGRhdGEsIGV4cHJlc3Npb25zLCBzb3J0aW5nKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGV4dHJhY3RWYWx1ZUZyb21EaW1lbnNpb24oZGltOiBJUGl2b3REaW1lbnNpb24sIHJlY0RhdGE6IGFueSkge1xuICAgICAgICByZXR1cm4gZGltLm1lbWJlckZ1bmN0aW9uID8gZGltLm1lbWJlckZ1bmN0aW9uLmNhbGwobnVsbCwgcmVjRGF0YSkgOiByZWNEYXRhW2RpbS5tZW1iZXJOYW1lXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldERpbWVuc2lvbkRlcHRoKGRpbTogSVBpdm90RGltZW5zaW9uKTogbnVtYmVyIHtcbiAgICAgICAgbGV0IGx2bCA9IDA7XG4gICAgICAgIHdoaWxlIChkaW0uY2hpbGRMZXZlbCkge1xuICAgICAgICAgICAgbHZsKys7XG4gICAgICAgICAgICBkaW0gPSBkaW0uY2hpbGRMZXZlbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbHZsO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZXh0cmFjdFZhbHVlc0ZvclJvdyhkaW1zOiBJUGl2b3REaW1lbnNpb25bXSwgcmVjRGF0YTogYW55LCBwaXZvdEtleXM6IElQaXZvdEtleXMpIHtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gbmV3IE1hcDxzdHJpbmcsIGFueT4oKTtcbiAgICAgICAgZm9yIChjb25zdCBjb2wgb2YgZGltcykge1xuICAgICAgICAgICAgaWYgKHJlY0RhdGFbcGl2b3RLZXlzLmxldmVsXSAmJiByZWNEYXRhW3Bpdm90S2V5cy5sZXZlbF0gPiAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGREYXRhID0gcmVjRGF0YVtwaXZvdEtleXMucmVjb3Jkc107XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RmllbGRzSGllcmFyY2h5KGNoaWxkRGF0YSwgW2NvbF0sIFBpdm90RGltZW5zaW9uVHlwZS5Sb3csIHBpdm90S2V5cyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5leHRyYWN0VmFsdWVGcm9tRGltZW5zaW9uKGNvbCwgcmVjRGF0YSk7XG4gICAgICAgICAgICBjb25zdCBvYmpWYWx1ZSA9IHt9O1xuICAgICAgICAgICAgb2JqVmFsdWVbJ3ZhbHVlJ10gPSB2YWx1ZTtcbiAgICAgICAgICAgIG9ialZhbHVlWydkaW1lbnNpb24nXSA9IGNvbDtcbiAgICAgICAgICAgIGlmIChjb2wuY2hpbGRMZXZlbCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkVmFsdWVzID0gdGhpcy5leHRyYWN0VmFsdWVzRm9yUm93KFtjb2wuY2hpbGRMZXZlbF0sIHJlY0RhdGEsIHBpdm90S2V5cyk7XG4gICAgICAgICAgICAgICAgb2JqVmFsdWVbcGl2b3RLZXlzLmNoaWxkcmVuXSA9IGNoaWxkVmFsdWVzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFsdWVzLnNldCh2YWx1ZSwgb2JqVmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHZhbHVlcztcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGV4dHJhY3RWYWx1ZXNGb3JDb2x1bW4oZGltczogSVBpdm90RGltZW5zaW9uW10sIHJlY0RhdGE6IGFueSwgcGl2b3RLZXlzOiBJUGl2b3RLZXlzLCBwYXRoID0gW10pIHtcbiAgICAgICAgY29uc3QgdmFscyA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XG4gICAgICAgIGxldCBsdmxDb2xsZWN0aW9uID0gdmFscztcbiAgICAgICAgY29uc3QgZmxhdHRlbmVkRGltcyA9IHRoaXMuZmxhdHRlbihkaW1zKTtcbiAgICAgICAgZm9yIChjb25zdCBjb2wgb2YgZmxhdHRlbmVkRGltcykge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmV4dHJhY3RWYWx1ZUZyb21EaW1lbnNpb24oY29sLCByZWNEYXRhKTtcbiAgICAgICAgICAgIHBhdGgucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IHBhdGguam9pbihwaXZvdEtleXMuY29sdW1uRGltZW5zaW9uU2VwYXJhdG9yKTtcbiAgICAgICAgICAgIGNvbnN0IG5ld09iaiA9IHsgdmFsdWU6IG5ld1ZhbHVlLCBleHBhbmRhYmxlOiBjb2wuZXhwYW5kYWJsZSwgY2hpbGRyZW46IG51bGwsIGRpbWVuc2lvbjogY29sIH07XG4gICAgICAgICAgICBpZiAoIW5ld09iai5jaGlsZHJlbikge1xuICAgICAgICAgICAgICAgIG5ld09iai5jaGlsZHJlbiA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsdmxDb2xsZWN0aW9uLnNldChuZXdWYWx1ZSwgbmV3T2JqKTtcbiAgICAgICAgICAgIGx2bENvbGxlY3Rpb24gPSBuZXdPYmouY2hpbGRyZW47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHM7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBmbGF0dGVuKGFyciwgbHZsID0gMCkge1xuICAgICAgICBjb25zdCBuZXdBcnIgPSBhcnIucmVkdWNlKChhY2MsIGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGl0ZW0ubGV2ZWwgPSBsdmw7XG4gICAgICAgICAgICBhY2MucHVzaChpdGVtKTtcbiAgICAgICAgICAgIGlmIChpdGVtLmNoaWxkTGV2ZWwpIHtcbiAgICAgICAgICAgICAgICBpdGVtLmV4cGFuZGFibGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGFjYyA9IGFjYy5jb25jYXQodGhpcy5mbGF0dGVuKFtpdGVtLmNoaWxkTGV2ZWxdLCBsdmwgKyAxKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9LCBbXSk7XG4gICAgICAgIHJldHVybiBuZXdBcnI7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBhcHBseUFnZ3JlZ2F0aW9ucyhyZWM6IElQaXZvdEdyaWRSZWNvcmQsIGhpZXJhcmNoaWVzLCB2YWx1ZXMsIHBpdm90S2V5czogSVBpdm90S2V5cykge1xuICAgICAgICBpZiAoaGllcmFyY2hpZXMuc2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgLy8gbm8gY29sdW1uIGdyb3Vwc1xuICAgICAgICAgICAgY29uc3QgYWdncmVnYXRpb25SZXN1bHQgPSB0aGlzLmFnZ3JlZ2F0ZShyZWMucmVjb3JkcywgdmFsdWVzKTtcbiAgICAgICAgICAgIHRoaXMuYXBwbHlBZ2dyZWdhdGlvblJlY29yZERhdGEoYWdncmVnYXRpb25SZXN1bHQsIHVuZGVmaW5lZCwgcmVjLCBwaXZvdEtleXMpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGhpZXJhcmNoaWVzLmZvckVhY2goKGhpZXJhcmNoeSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBoaWVyYXJjaHlbcGl2b3RLZXlzLmNoaWxkcmVuXTtcbiAgICAgICAgICAgIGlmIChjaGlsZHJlbiAmJiBjaGlsZHJlbi5zaXplID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwbHlBZ2dyZWdhdGlvbnMocmVjLCBjaGlsZHJlbiwgdmFsdWVzLCBwaXZvdEtleXMpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkUmVjb3JkcyA9IHRoaXMuY29sbGVjdFJlY29yZHMoY2hpbGRyZW4sIHBpdm90S2V5cyk7XG4gICAgICAgICAgICAgICAgaGllcmFyY2h5W3Bpdm90S2V5cy5hZ2dyZWdhdGlvbnNdID0gdGhpcy5hZ2dyZWdhdGUoY2hpbGRSZWNvcmRzLCB2YWx1ZXMpO1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwbHlBZ2dyZWdhdGlvblJlY29yZERhdGEoaGllcmFyY2h5W3Bpdm90S2V5cy5hZ2dyZWdhdGlvbnNdLCBoaWVyYXJjaHkudmFsdWUsIHJlYywgcGl2b3RLZXlzKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaGllcmFyY2h5W3Bpdm90S2V5cy5yZWNvcmRzXSkge1xuICAgICAgICAgICAgICAgIGhpZXJhcmNoeVtwaXZvdEtleXMuYWdncmVnYXRpb25zXSA9IHRoaXMuYWdncmVnYXRlKGhpZXJhcmNoeVtwaXZvdEtleXMucmVjb3Jkc10sIHZhbHVlcyk7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBseUFnZ3JlZ2F0aW9uUmVjb3JkRGF0YShoaWVyYXJjaHlbcGl2b3RLZXlzLmFnZ3JlZ2F0aW9uc10sIGhpZXJhcmNoeS52YWx1ZSwgcmVjLCBwaXZvdEtleXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgc3RhdGljIGFwcGx5QWdncmVnYXRpb25SZWNvcmREYXRhKGFnZ3JlZ2F0aW9uRGF0YTogYW55LCBncm91cE5hbWU6IHN0cmluZywgcmVjOiBJUGl2b3RHcmlkUmVjb3JkLCBwaXZvdEtleXM6IElQaXZvdEtleXMpIHtcbiAgICAgICAgY29uc3QgYWdncmVnYXRpb25LZXlzID0gT2JqZWN0LmtleXMoYWdncmVnYXRpb25EYXRhKTtcbiAgICAgICAgaWYgKGFnZ3JlZ2F0aW9uS2V5cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICBhZ2dyZWdhdGlvbktleXMuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWdncmVnYXRpb25LZXkgPSBncm91cE5hbWUgPyBncm91cE5hbWUgKyBwaXZvdEtleXMuY29sdW1uRGltZW5zaW9uU2VwYXJhdG9yICsga2V5IDoga2V5O1xuICAgICAgICAgICAgICAgIHJlYy5hZ2dyZWdhdGlvblZhbHVlcy5zZXQoYWdncmVnYXRpb25LZXksIGFnZ3JlZ2F0aW9uRGF0YVtrZXldKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgIGlmIChhZ2dyZWdhdGlvbktleXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBjb25zdCBhZ2dyZWdhdGlvbktleSA9IGFnZ3JlZ2F0aW9uS2V5c1swXTtcbiAgICAgICAgICAgIHJlYy5hZ2dyZWdhdGlvblZhbHVlcy5zZXQoZ3JvdXBOYW1lIHx8IGFnZ3JlZ2F0aW9uS2V5LCBhZ2dyZWdhdGlvbkRhdGFbYWdncmVnYXRpb25LZXldKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgYWdncmVnYXRlKHJlY29yZHMsIHZhbHVlczogSVBpdm90VmFsdWVbXSkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBwaXZvdFZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgICAgICAgcmVzdWx0W3Bpdm90VmFsdWUubWVtYmVyXSA9IHBpdm90VmFsdWUuYWdncmVnYXRlLmFnZ3JlZ2F0b3IocmVjb3Jkcy5tYXAociA9PiByW3Bpdm90VmFsdWUubWVtYmVyXSksIHJlY29yZHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIHByb2Nlc3NIaWVyYXJjaHkoaGllcmFyY2hpZXMsIHBpdm90S2V5cywgbGV2ZWwgPSAwLCByb290RGF0YSA9IGZhbHNlKTogSVBpdm90R3JpZFJlY29yZFtdIHtcbiAgICAgICAgY29uc3QgZmxhdERhdGE6IElQaXZvdEdyaWRSZWNvcmRbXSA9IFtdO1xuICAgICAgICBoaWVyYXJjaGllcy5mb3JFYWNoKChoLCBrZXkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gaC5kaW1lbnNpb24ubWVtYmVyTmFtZTtcbiAgICAgICAgICAgIGNvbnN0IHJlYzogSVBpdm90R3JpZFJlY29yZCA9IHtcbiAgICAgICAgICAgICAgICBkaW1lbnNpb25WYWx1ZXM6IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCksXG4gICAgICAgICAgICAgICAgYWdncmVnYXRpb25WYWx1ZXM6IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCksXG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IG5ldyBNYXA8c3RyaW5nLCBJUGl2b3RHcmlkUmVjb3JkW10+KCksXG4gICAgICAgICAgICAgICAgZGltZW5zaW9uczogW2guZGltZW5zaW9uXVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJlYy5kaW1lbnNpb25WYWx1ZXMuc2V0KGZpZWxkLCBrZXkpO1xuICAgICAgICAgICAgaWYgKGhbcGl2b3RLZXlzLnJlY29yZHNdKSB7XG4gICAgICAgICAgICAgICAgcmVjLnJlY29yZHMgPSB0aGlzLmdldERpcmVjdExlYWZzKGhbcGl2b3RLZXlzLnJlY29yZHNdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlYy5sZXZlbCA9IGxldmVsO1xuICAgICAgICAgICAgZmxhdERhdGEucHVzaChyZWMpO1xuICAgICAgICAgICAgaWYgKGhbcGl2b3RLZXlzLmNoaWxkcmVuXSAmJiBoW3Bpdm90S2V5cy5jaGlsZHJlbl0uc2l6ZSA+IDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXN0ZWREYXRhID0gdGhpcy5wcm9jZXNzSGllcmFyY2h5KGhbcGl2b3RLZXlzLmNoaWxkcmVuXSxcbiAgICAgICAgICAgICAgICAgICAgcGl2b3RLZXlzLCBsZXZlbCArIDEsIHJvb3REYXRhKTtcbiAgICAgICAgICAgICAgICByZWMucmVjb3JkcyA9IHRoaXMuZ2V0RGlyZWN0TGVhZnMobmVzdGVkRGF0YSk7XG4gICAgICAgICAgICAgICAgcmVjLmNoaWxkcmVuLnNldChmaWVsZCwgbmVzdGVkRGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBmbGF0RGF0YTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldERpcmVjdExlYWZzKHJlY29yZHM6IElQaXZvdEdyaWRSZWNvcmRbXSkge1xuICAgICAgICBsZXQgbGVhZnMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCByZWMgb2YgcmVjb3Jkcykge1xuICAgICAgICAgICAgaWYgKHJlYy5yZWNvcmRzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IHJlYy5yZWNvcmRzLmZpbHRlcih4ID0+ICF4LnJlY29yZHMgJiYgbGVhZnMuaW5kZXhPZih4KSA9PT0gLTEpO1xuICAgICAgICAgICAgICAgIGxlYWZzID0gbGVhZnMuY29uY2F0KGRhdGEpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBsZWFmcy5wdXNoKHJlYyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxlYWZzO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0UmVjb3JkS2V5KHJlYzogSVBpdm90R3JpZFJlY29yZCwgY3VycmVudERpbTogSVBpdm90RGltZW5zaW9uLCkge1xuICAgICAgICBjb25zdCBwYXJlbnRGaWVsZHMgPSBbXTtcbiAgICAgICAgY29uc3QgY3VycmVudERpbUluZGV4ID0gcmVjLmRpbWVuc2lvbnMuZmluZEluZGV4KHggPT4geC5tZW1iZXJOYW1lID09PSBjdXJyZW50RGltLm1lbWJlck5hbWUpICsgMTtcbiAgICAgICAgY29uc3QgcHJldkRpbXMgPSByZWMuZGltZW5zaW9ucy5zbGljZSgwLCBjdXJyZW50RGltSW5kZXgpO1xuICAgICAgICBmb3IgKGNvbnN0IHByZXYgb2YgcHJldkRpbXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHByZXZWYWx1ZSA9IHJlYy5kaW1lbnNpb25WYWx1ZXMuZ2V0KHByZXYubWVtYmVyTmFtZSk7XG4gICAgICAgICAgICBwYXJlbnRGaWVsZHMucHVzaChwcmV2VmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXJlbnRGaWVsZHMuam9pbignLScpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgYnVpbGRFeHByZXNzaW9uVHJlZShjb25maWc6IElQaXZvdENvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgY29uc3QgYWxsRGltZW5zaW9ucyA9IChjb25maWc/LnJvd3MgfHwgW10pLmNvbmNhdCgoY29uZmlnPy5jb2x1bW5zIHx8IFtdKSkuY29uY2F0KGNvbmZpZz8uZmlsdGVycyB8fCBbXSkuZmlsdGVyKHggPT4geCAhPT0gbnVsbCAmJiB4ICE9PSB1bmRlZmluZWQpO1xuICAgICAgICBjb25zdCBlbmFibGVkRGltZW5zaW9ucyA9IGFsbERpbWVuc2lvbnMuZmlsdGVyKHggPT4geCAmJiB4LmVuYWJsZWQpO1xuXG4gICAgICAgIGNvbnN0IGV4cHJlc3Npb25zVHJlZSA9IG5ldyBGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUoRmlsdGVyaW5nTG9naWMuQW5kKTtcbiAgICAgICAgLy8gYWRkIGV4cHJlc3Npb24gdHJlZXMgZnJvbSBhbGwgZmlsdGVyc1xuICAgICAgICBQaXZvdFV0aWwuZmxhdHRlbihlbmFibGVkRGltZW5zaW9ucykuZm9yRWFjaCgoeDogSVBpdm90RGltZW5zaW9uKSA9PiB7XG4gICAgICAgICAgICBpZiAoeC5maWx0ZXIgJiYgeC5maWx0ZXIuZmlsdGVyaW5nT3BlcmFuZHMpIHtcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uc1RyZWUuZmlsdGVyaW5nT3BlcmFuZHMucHVzaCguLi54LmZpbHRlci5maWx0ZXJpbmdPcGVyYW5kcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBleHByZXNzaW9uc1RyZWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgY29sbGVjdFJlY29yZHMoY2hpbGRyZW4sIHBpdm90S2V5czogSVBpdm90S2V5cykge1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGNoaWxkcmVuLmZvckVhY2godmFsdWUgPT4gcmVzdWx0ID0gcmVzdWx0LmNvbmNhdCh2YWx1ZVtwaXZvdEtleXMucmVjb3Jkc10pKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBhcHBseUhpZXJhcmNoeUNoaWxkcmVuKGhpZXJhcmNoeSwgdmFsLCByZWMsIHBpdm90S2V5czogSVBpdm90S2V5cykge1xuICAgICAgICBjb25zdCByZWNvcmRzS2V5ID0gcGl2b3RLZXlzLnJlY29yZHM7XG4gICAgICAgIGNvbnN0IGNoaWxkS2V5ID0gcGl2b3RLZXlzLmNoaWxkcmVuO1xuICAgICAgICBjb25zdCBjaGlsZENvbGxlY3Rpb24gPSB2YWxbY2hpbGRLZXldO1xuICAgICAgICBjb25zdCBoaWVyYXJjaHlWYWx1ZSA9IGhpZXJhcmNoeS5nZXQodmFsLnZhbHVlKTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaGllcmFyY2h5VmFsdWVbY2hpbGRLZXldKSkge1xuICAgICAgICAgICAgaGllcmFyY2h5VmFsdWVbY2hpbGRLZXldID0gbmV3IE1hcDxzdHJpbmcsIGFueT4oKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWNoaWxkQ29sbGVjdGlvbiB8fCBjaGlsZENvbGxlY3Rpb24uc2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgY29uc3QgZGltID0gaGllcmFyY2h5VmFsdWUuZGltZW5zaW9uO1xuICAgICAgICAgICAgY29uc3QgaXNWYWxpZCA9IHRoaXMuZXh0cmFjdFZhbHVlRnJvbURpbWVuc2lvbihkaW0sIHJlYykgPT09IHZhbC52YWx1ZTtcbiAgICAgICAgICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICAgICAgICAgICAgaWYgKGhpZXJhcmNoeVZhbHVlW3JlY29yZHNLZXldKSB7XG4gICAgICAgICAgICAgICAgICAgIGhpZXJhcmNoeVZhbHVlW3JlY29yZHNLZXldLnB1c2gocmVjKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBoaWVyYXJjaHlWYWx1ZVtyZWNvcmRzS2V5XSA9IFtyZWNdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGhpZXJhcmNoeUNoaWxkID0gaGllcmFyY2h5VmFsdWVbY2hpbGRLZXldO1xuICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCBjaGlsZF0gb2YgY2hpbGRDb2xsZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgbGV0IGhpZXJhcmNoeUNoaWxkVmFsdWUgPSBoaWVyYXJjaHlDaGlsZC5nZXQoY2hpbGQudmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmICghaGllcmFyY2h5Q2hpbGRWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBoaWVyYXJjaHlDaGlsZC5zZXQoY2hpbGQudmFsdWUsIGNoaWxkKTtcbiAgICAgICAgICAgICAgICAgICAgaGllcmFyY2h5Q2hpbGRWYWx1ZSA9IGNoaWxkO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChoaWVyYXJjaHlDaGlsZFZhbHVlW3JlY29yZHNLZXldKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvcHkgPSBPYmplY3QuYXNzaWduKHt9LCByZWMpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVjW3JlY29yZHNLZXldKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBub3QgYWxsIG5lc3RlZCBjaGlsZHJlbiBhcmUgdmFsaWRcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5lc3RlZFZhbHVlID0gaGllcmFyY2h5Q2hpbGRWYWx1ZS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRpbWVuc2lvbiA9IGhpZXJhcmNoeUNoaWxkVmFsdWUuZGltZW5zaW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsaWRSZWNzID0gcmVjW3JlY29yZHNLZXldLmZpbHRlcih4ID0+IHRoaXMuZXh0cmFjdFZhbHVlRnJvbURpbWVuc2lvbihkaW1lbnNpb24sIHgpID09PSBuZXN0ZWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb3B5W3JlY29yZHNLZXldID0gdmFsaWRSZWNzO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGhpZXJhcmNoeUNoaWxkVmFsdWVbcmVjb3Jkc0tleV0ucHVzaChjb3B5KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBoaWVyYXJjaHlDaGlsZFZhbHVlW3JlY29yZHNLZXldID0gW3JlY107XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkW2NoaWxkS2V5XSAmJiBjaGlsZFtjaGlsZEtleV0uc2l6ZSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHBseUhpZXJhcmNoeUNoaWxkcmVuKGhpZXJhcmNoeUNoaWxkLCBjaGlsZCwgcmVjLCBwaXZvdEtleXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0QWdncmVnYXRlTGlzdCh2YWw6IElQaXZvdFZhbHVlLCBncmlkOiBQaXZvdEdyaWRUeXBlKTogSVBpdm90QWdncmVnYXRvcltdIHtcbiAgICAgICAgaWYgKCF2YWwuYWdncmVnYXRlTGlzdCkge1xuICAgICAgICAgICAgbGV0IGRlZmF1bHRBZ2dyID0gdGhpcy5nZXRBZ2dyZWdhdG9yc0ZvclZhbHVlKHZhbCwgZ3JpZCk7XG4gICAgICAgICAgICBjb25zdCBpc0RlZmF1bHQgPSBkZWZhdWx0QWdnci5maW5kKFxuICAgICAgICAgICAgICAgICh4KSA9PiB4LmtleSA9PT0gdmFsLmFnZ3JlZ2F0ZS5rZXlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICAvLyByZXNvbHZlIGN1c3RvbSBhZ2dyZWdhdGlvbnNcbiAgICAgICAgICAgIGlmICghaXNEZWZhdWx0ICYmIGdyaWQuZGF0YVswXVt2YWwubWVtYmVyXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgLy8gaWYgZmllbGQgZXhpc3RzLCB0aGVuIHdlIGNhbiBhcHBseSBkZWZhdWx0IGFnZ3JlZ2F0aW9ucyBhbmQgYWRkIHRoZSBjdXN0b20gb25lLlxuICAgICAgICAgICAgICAgIGRlZmF1bHRBZ2dyLnVuc2hpZnQodmFsLmFnZ3JlZ2F0ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFpc0RlZmF1bHQpIHtcbiAgICAgICAgICAgICAgICAvLyBvdGhlcndpc2UgdGhpcyBpcyBhIGN1c3RvbSBhZ2dyZWdhdGlvbiB0aGF0IGlzIG5vdCBjb21wYXRpYmxlXG4gICAgICAgICAgICAgICAgLy8gd2l0aCB0aGUgZGVmYXVsdHMsIHNpbmNlIGl0IG9wZXJhdGVzIG9uIGZpZWxkIHRoYXQgaXMgbm90IGluIHRoZSBkYXRhXG4gICAgICAgICAgICAgICAgLy8gbGVhdmUgb25seSB0aGUgY3VzdG9tIG9uZS5cbiAgICAgICAgICAgICAgICBkZWZhdWx0QWdnciA9IFt2YWwuYWdncmVnYXRlXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhbC5hZ2dyZWdhdGVMaXN0ID0gZGVmYXVsdEFnZ3I7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbC5hZ2dyZWdhdGVMaXN0O1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0QWdncmVnYXRvcnNGb3JWYWx1ZSh2YWx1ZTogSVBpdm90VmFsdWUsIGdyaWQ6IFBpdm90R3JpZFR5cGUpOiBJUGl2b3RBZ2dyZWdhdG9yW10ge1xuICAgICAgICBjb25zdCBkYXRhVHlwZSA9IHZhbHVlLmRhdGFUeXBlIHx8IGdyaWQucmVzb2x2ZURhdGFUeXBlcyhncmlkLmRhdGFbMF1bdmFsdWUubWVtYmVyXSk7XG4gICAgICAgIHN3aXRjaCAoZGF0YVR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgR3JpZENvbHVtbkRhdGFUeXBlLk51bWJlcjpcbiAgICAgICAgICAgIGNhc2UgR3JpZENvbHVtbkRhdGFUeXBlLkN1cnJlbmN5OlxuICAgICAgICAgICAgICAgIHJldHVybiBJZ3hQaXZvdE51bWVyaWNBZ2dyZWdhdGUuYWdncmVnYXRvcnMoKTtcbiAgICAgICAgICAgIGNhc2UgR3JpZENvbHVtbkRhdGFUeXBlLkRhdGU6XG4gICAgICAgICAgICBjYXNlIEdyaWRDb2x1bW5EYXRhVHlwZS5EYXRlVGltZTpcbiAgICAgICAgICAgICAgICByZXR1cm4gSWd4UGl2b3REYXRlQWdncmVnYXRlLmFnZ3JlZ2F0b3JzKCk7XG4gICAgICAgICAgICBjYXNlIEdyaWRDb2x1bW5EYXRhVHlwZS5UaW1lOlxuICAgICAgICAgICAgICAgIHJldHVybiBJZ3hQaXZvdFRpbWVBZ2dyZWdhdGUuYWdncmVnYXRvcnMoKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIElneFBpdm90QWdncmVnYXRlLmFnZ3JlZ2F0b3JzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cblxufVxuIl19
|
|
385
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGl2b3QtdXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9ncmlkcy9waXZvdC1ncmlkL3Bpdm90LXV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbkUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxRQUFRLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDdEYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFHNUYsT0FBTyxFQUF3QixVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN0RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUscUJBQXFCLEVBQUUsd0JBQXdCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNuSSxPQUFPLEVBQXFHLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFL0osTUFBTSxPQUFPLFNBQVM7SUFFbEIsa0VBQWtFO0lBQzNELE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBd0IsRUFBRSxTQUEwQixFQUFFLFNBQXFCO1FBQ25HLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxFQUFFO1lBQ3BCLDRCQUE0QjtZQUM1QixJQUFJLEdBQUcsQ0FBQyxRQUFRLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxFQUFFO2dCQUN2Qyw0QkFBNEI7Z0JBQzVCLEdBQUcsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFO29CQUNqQyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxT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QTZCO2dCQUM3QixXQUFXLEdBQUcsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDakM7WUFDRCxHQUFHLENBQUMsYUFBYSxHQUFHLFdBQVcsQ0FBQztTQUNuQztRQUNELE9BQU8sR0FBRyxDQUFDLGFBQWEsQ0FBQztJQUM3QixDQUFDO0lBRU0sTUFBTSxDQUFDLHNCQUFzQixDQUFDLEtBQWtCLEVBQUUsSUFBbUI7UUFDeEUsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUNyRixRQUFRLFFBQVEsRUFBRTtZQUNkLEtBQUssa0JBQWtCLENBQUMsTUFBTSxDQUFDO1lBQy9CLEtBQUssa0JBQWtCLENBQUMsUUFBUTtnQkFDNUIsT0FBTyx3QkFBd0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNsRCxLQUFLLGtCQUFrQixDQUFDLElBQUksQ0FBQztZQUM3QixLQUFLLGtCQUFrQixDQUFDLFFBQVE7Z0JBQzVCLE9BQU8scUJBQXFCLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDL0MsS0FBSyxrQkFBa0IsQ0FBQyxJQUFJO2dCQUN4QixPQUFPLHFCQUFxQixDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQy9DO2dCQUNJLE9BQU8saUJBQWlCLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDOUM7SUFDTCxDQUFDO0NBR0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDdXJyZW50UmVzb3VyY2VTdHJpbmdzIH0gZnJvbSAnLi4vLi4vY29yZS9pMThuL3Jlc291cmNlcyc7XG5pbXBvcnQgeyBjbG9uZVZhbHVlIH0gZnJvbSAnLi4vLi4vY29yZS91dGlscyc7XG5pbXBvcnQgeyBEYXRhVXRpbCwgR3JpZENvbHVtbkRhdGFUeXBlIH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL2RhdGEtdXRpbCc7XG5pbXBvcnQgeyBGaWx0ZXJpbmdMb2dpYyB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9maWx0ZXJpbmctZXhwcmVzc2lvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlIH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL2ZpbHRlcmluZy1leHByZXNzaW9ucy10cmVlJztcbmltcG9ydCB7IElTb3J0aW5nRXhwcmVzc2lvbiB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9zb3J0aW5nLXN0cmF0ZWd5JztcbmltcG9ydCB7IFBpdm90R3JpZFR5cGUgfSBmcm9tICcuLi9jb21tb24vZ3JpZC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSUdyaWRTb3J0aW5nU3RyYXRlZ3ksIElneFNvcnRpbmcgfSBmcm9tICcuLi9jb21tb24vc3RyYXRlZ3knO1xuaW1wb3J0IHsgSWd4UGl2b3RBZ2dyZWdhdGUsIElneFBpdm90RGF0ZUFnZ3JlZ2F0ZSwgSWd4UGl2b3ROdW1lcmljQWdncmVnYXRlLCBJZ3hQaXZvdFRpbWVBZ2dyZWdhdGUgfSBmcm9tICcuL3Bpdm90LWdyaWQtYWdncmVnYXRlJztcbmltcG9ydCB7IElQaXZvdEFnZ3JlZ2F0b3IsIElQaXZvdENvbmZpZ3VyYXRpb24sIElQaXZvdERpbWVuc2lvbiwgSVBpdm90R3JpZFJlY29yZCwgSVBpdm90S2V5cywgSVBpdm90VmFsdWUsIFBpdm90RGltZW5zaW9uVHlwZSB9IGZyb20gJy4vcGl2b3QtZ3JpZC5pbnRlcmZhY2UnO1xuXG5leHBvcnQgY2xhc3MgUGl2b3RVdGlsIHtcblxuICAgIC8vIGdvIHRocm91Z2ggYWxsIGNoaWxkcmVuIGFuZCBhcHBseSBuZXcgZGltZW5zaW9uIGdyb3VwcyBhcyBjaGlsZFxuICAgIHB1YmxpYyBzdGF0aWMgcHJvY2Vzc0dyb3VwcyhyZWNzOiBJUGl2b3RHcmlkUmVjb3JkW10sIGRpbWVuc2lvbjogSVBpdm90RGltZW5zaW9uLCBwaXZvdEtleXM6IElQaXZvdEtleXMpIHtcbiAgICAgICAgZm9yIChjb25zdCByZWMgb2YgcmVjcykge1xuICAgICAgICAgICAgLy8gcHJvY2VzcyBleGlzdGluZyBjaGlsZHJlblxuICAgICAgICAgICAgaWYgKHJlYy5jaGlsZHJlbiAmJiByZWMuY2hpbGRyZW4uc2l6ZSA+IDApIHtcbiAgICAgICAgICAgICAgICAvLyBwcm9jZXNzIGhpZXJhcmNoeSBpbiBkZXB0XG4gICAgICAgICAgICAgICAgcmVjLmNoaWxkcmVuLmZvckVhY2goKHZhbHVlcywga2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc0dyb3Vwcyh2YWx1ZXMsIGRpbWVuc2lvbiwgcGl2b3RLZXlzKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGFkZCBjaGlsZHJlbiBmb3IgY3VycmVudCBkaW1lbnNpb25cbiAgICAgICAgICAgIGNvbnN0IGhpZXJhcmNoeUZpZWxkcyA9IFBpdm90VXRpbFxuICAgICAgICAgICAgICAgIC5nZXRGaWVsZHNIaWVyYXJjaHkocmVjLnJlY29yZHMsIFtkaW1lbnNpb25dLCBQaXZvdERpbWVuc2lvblR5cGUuUm93LCBwaXZvdEtleXMpO1xuICAgICAgICAgICAgY29uc3QgdmFsdWVzID0gQXJyYXkuZnJvbShoaWVyYXJjaHlGaWVsZHMudmFsdWVzKCkpLmZpbmQoeCA9PiB4LmRpbWVuc2lvbi5tZW1iZXJOYW1lID09PSBkaW1lbnNpb24ubWVtYmVyTmFtZSk7XG4gICAgICAgICAgICBjb25zdCBzaWJsaW5nRGF0YSA9IFBpdm90VXRpbFxuICAgICAgICAgICAgICAgIC5wcm9jZXNzSGllcmFyY2h5KGhpZXJhcmNoeUZpZWxkcywgcGl2b3RLZXlzLCAwKTtcbiAgICAgICAgICAgIHJlYy5jaGlsZHJlbi5zZXQoZGltZW5zaW9uLm1lbWJlck5hbWUsIHNpYmxpbmdEYXRhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZmxhdHRlbkdyb3VwcyhkYXRhOiBJUGl2b3RHcmlkUmVjb3JkW10sIGRpbWVuc2lvbjogSVBpdm90RGltZW5zaW9uLCBleHBhbnNpb25TdGF0ZXMsIGRlZmF1bHRFeHBhbmQ6IGJvb2xlYW4sIHBhcmVudD86IElQaXZvdERpbWVuc2lvbiwgcGFyZW50UmVjPzogSVBpdm90R3JpZFJlY29yZCkge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHJlYyA9IGRhdGFbaV07XG4gICAgICAgICAgICBjb25zdCBmaWVsZCA9IGRpbWVuc2lvbi5tZW1iZXJOYW1lO1xuICAgICAgICAgICAgaWYgKCFmaWVsZCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgcmVjb3Jkc0RhdGEgPSByZWMuY2hpbGRyZW4uZ2V0KGZpZWxkKTtcbiAgICAgICAgICAgIGlmICghcmVjb3Jkc0RhdGEgJiYgcGFyZW50KSB7XG4gICAgICAgICAgICAgICAgLy8gY2hlY2sgcGFyZW50XG4gICAgICAgICAgICAgICAgcmVjb3Jkc0RhdGEgPSByZWMuY2hpbGRyZW4uZ2V0KHBhcmVudC5tZW1iZXJOYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAocmVjb3Jkc0RhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgZGltZW5zaW9uID0gcGFyZW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHBhcmVudFJlYykge1xuICAgICAgICAgICAgICAgIHBhcmVudFJlYy5kaW1lbnNpb25WYWx1ZXMuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50Lm1lbWJlck5hbWUgIT09IGtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVjLmRpbWVuc2lvblZhbHVlcy5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkaW0gPSBwYXJlbnRSZWMuZGltZW5zaW9ucy5maW5kKHggPT4geC5tZW1iZXJOYW1lID09PSBrZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVjLmRpbWVuc2lvbnMudW5zaGlmdChkaW0pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICBjb25zdCBleHBhbnNpb25Sb3dLZXkgPSBQaXZvdFV0aWwuZ2V0UmVjb3JkS2V5KHJlYywgZGltZW5zaW9uKTtcbiAgICAgICAgICAgIGNvbnN0IGlzRXhwYW5kZWQgPSBleHBhbnNpb25TdGF0ZXMuZ2V0KGV4cGFuc2lvblJvd0tleSkgPT09IHVuZGVmaW5lZCA/XG4gICAgICAgICAgICAgICAgZGVmYXVsdEV4cGFuZCA6XG4gICAgICAgICAgICAgICAgZXhwYW5zaW9uU3RhdGVzLmdldChleHBhbnNpb25Sb3dLZXkpO1xuICAgICAgICAgICAgY29uc3Qgc2hvdWxkRXhwYW5kID0gaXNFeHBhbmRlZCB8fCAhZGltZW5zaW9uLmNoaWxkTGV2ZWwgfHwgIXJlYy5kaW1lbnNpb25WYWx1ZXMuZ2V0KGRpbWVuc2lvbi5tZW1iZXJOYW1lKTtcbiAgICAgICAgICAgIGlmIChzaG91bGRFeHBhbmQgJiYgcmVjb3Jkc0RhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGltZW5zaW9uLmNoaWxkTGV2ZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mbGF0dGVuR3JvdXBzKHJlY29yZHNEYXRhLCBkaW1lbnNpb24uY2hpbGRMZXZlbCwgZXhwYW5zaW9uU3RhdGVzLCBkZWZhdWx0RXhwYW5kLCBkaW1lbnNpb24sIHJlYyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gY29weSBwYXJlbnQgdmFsdWVzIGFuZCBkaW1zIGluIGNoaWxkXG4gICAgICAgICAgICAgICAgICAgIHJlY29yZHNEYXRhLmZvckVhY2goeCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWMuZGltZW5zaW9uVmFsdWVzLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGltZW5zaW9uLm1lbWJlck5hbWUgIT09IGtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LmRpbWVuc2lvblZhbHVlcy5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRpbSA9IHJlYy5kaW1lbnNpb25zLmZpbmQoeSA9PiB5Lm1lbWJlck5hbWUgPT09IGtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHguZGltZW5zaW9ucy51bnNoaWZ0KGRpbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZGF0YS5zcGxpY2UoaSArIDEsIDAsIC4uLnJlY29yZHNEYXRhKTtcbiAgICAgICAgICAgICAgICBpICs9IHJlY29yZHNEYXRhLmxlbmd0aDtcblxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHB1YmxpYyBzdGF0aWMgYXNzaWduTGV2ZWxzKGRpbXMpIHtcbiAgICAgICAgZm9yIChjb25zdCBkaW0gb2YgZGltcykge1xuICAgICAgICAgICAgbGV0IGN1cnJEaW0gPSBkaW07XG4gICAgICAgICAgICBsZXQgbHZsID0gMDtcbiAgICAgICAgICAgIHdoaWxlIChjdXJyRGltLmNoaWxkTGV2ZWwpIHtcbiAgICAgICAgICAgICAgICBjdXJyRGltLmxldmVsID0gbHZsO1xuICAgICAgICAgICAgICAgIGN1cnJEaW0gPSBjdXJyRGltLmNoaWxkTGV2ZWw7XG4gICAgICAgICAgICAgICAgbHZsKys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjdXJyRGltLmxldmVsID0gbHZsO1xuICAgICAgICB9XG4gICAgfVxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0RmllbGRzSGllcmFyY2h5KGRhdGE6IGFueVtdLCBkaW1lbnNpb25zOiBJUGl2b3REaW1lbnNpb25bXSxcbiAgICAgICAgZGltZW5zaW9uVHlwZTogUGl2b3REaW1lbnNpb25UeXBlLCBwaXZvdEtleXM6IElQaXZvdEtleXMpOiBNYXA8c3RyaW5nLCBhbnk+IHtcbiAgICAgICAgY29uc3QgaGllcmFyY2h5ID0gbmV3IE1hcDxzdHJpbmcsIGFueT4oKTtcbiAgICAgICAgZm9yIChjb25zdCByZWMgb2YgZGF0YSkge1xuICAgICAgICAgICAgY29uc3QgdmFscyA9IGRpbWVuc2lvblR5cGUgPT09IFBpdm90RGltZW5zaW9uVHlwZS5Db2x1bW4gP1xuICAgICAgICAgICAgICAgIHRoaXMuZXh0cmFjdFZhbHVlc0ZvckNvbHVtbihkaW1lbnNpb25zLCByZWMsIHBpdm90S2V5cykgOlxuICAgICAgICAgICAgICAgIHRoaXMuZXh0cmFjdFZhbHVlc0ZvclJvdyhkaW1lbnNpb25zLCByZWMsIHBpdm90S2V5cyk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgdmFscykgeyAvLyB0aGlzIHNob3VsZCBnbyBpbiBkZXB0aCBhbHNvIHZhbHMuY2hpbGRyZW5cbiAgICAgICAgICAgICAgICBpZiAoaGllcmFyY2h5LmdldCh2YWwudmFsdWUpICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHBseUhpZXJhcmNoeUNoaWxkcmVuKGhpZXJhcmNoeSwgdmFsLCByZWMsIHBpdm90S2V5cyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaGllcmFyY2h5LnNldCh2YWwudmFsdWUsIGNsb25lVmFsdWUodmFsKSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXBwbHlIaWVyYXJjaHlDaGlsZHJlbihoaWVyYXJjaHksIHZhbCwgcmVjLCBwaXZvdEtleXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaGllcmFyY2h5O1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgc29ydChkYXRhOiBJUGl2b3RHcmlkUmVjb3JkW10sIGV4cHJlc3Npb25zOiBJU29ydGluZ0V4cHJlc3Npb25bXSwgc29ydGluZzogSUdyaWRTb3J0aW5nU3RyYXRlZ3kgPSBuZXcgSWd4U29ydGluZygpKTogYW55W10ge1xuICAgICAgICBkYXRhLmZvckVhY2gocmVjID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gcmVjLmNoaWxkcmVuO1xuICAgICAgICAgICAgaWYgKGNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgY2hpbGRyZW4uZm9yRWFjaCh4ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zb3J0KHgsIGV4cHJlc3Npb25zLCBzb3J0aW5nKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBEYXRhVXRpbC5zb3J0KGRhdGEsIGV4cHJlc3Npb25zLCBzb3J0aW5nKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGV4dHJhY3RWYWx1ZUZyb21EaW1lbnNpb24oZGltOiBJUGl2b3REaW1lbnNpb24sIHJlY0RhdGE6IGFueSkge1xuICAgICAgICByZXR1cm4gZGltLm1lbWJlckZ1bmN0aW9uID8gZGltLm1lbWJlckZ1bmN0aW9uLmNhbGwobnVsbCwgcmVjRGF0YSkgOiByZWNEYXRhW2RpbS5tZW1iZXJOYW1lXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldERpbWVuc2lvbkRlcHRoKGRpbTogSVBpdm90RGltZW5zaW9uKTogbnVtYmVyIHtcbiAgICAgICAgbGV0IGx2bCA9IDA7XG4gICAgICAgIHdoaWxlIChkaW0uY2hpbGRMZXZlbCkge1xuICAgICAgICAgICAgbHZsKys7XG4gICAgICAgICAgICBkaW0gPSBkaW0uY2hpbGRMZXZlbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbHZsO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZXh0cmFjdFZhbHVlc0ZvclJvdyhkaW1zOiBJUGl2b3REaW1lbnNpb25bXSwgcmVjRGF0YTogYW55LCBwaXZvdEtleXM6IElQaXZvdEtleXMpIHtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gbmV3IE1hcDxzdHJpbmcsIGFueT4oKTtcbiAgICAgICAgZm9yIChjb25zdCBjb2wgb2YgZGltcykge1xuICAgICAgICAgICAgaWYgKHJlY0RhdGFbcGl2b3RLZXlzLmxldmVsXSAmJiByZWNEYXRhW3Bpdm90S2V5cy5sZXZlbF0gPiAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGREYXRhID0gcmVjRGF0YVtwaXZvdEtleXMucmVjb3Jkc107XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RmllbGRzSGllcmFyY2h5KGNoaWxkRGF0YSwgW2NvbF0sIFBpdm90RGltZW5zaW9uVHlwZS5Sb3csIHBpdm90S2V5cyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5leHRyYWN0VmFsdWVGcm9tRGltZW5zaW9uKGNvbCwgcmVjRGF0YSk7XG4gICAgICAgICAgICBjb25zdCBvYmpWYWx1ZSA9IHt9O1xuICAgICAgICAgICAgb2JqVmFsdWVbJ3ZhbHVlJ10gPSB2YWx1ZTtcbiAgICAgICAgICAgIG9ialZhbHVlWydkaW1lbnNpb24nXSA9IGNvbDtcbiAgICAgICAgICAgIGlmIChjb2wuY2hpbGRMZXZlbCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkVmFsdWVzID0gdGhpcy5leHRyYWN0VmFsdWVzRm9yUm93KFtjb2wuY2hpbGRMZXZlbF0sIHJlY0RhdGEsIHBpdm90S2V5cyk7XG4gICAgICAgICAgICAgICAgb2JqVmFsdWVbcGl2b3RLZXlzLmNoaWxkcmVuXSA9IGNoaWxkVmFsdWVzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFsdWVzLnNldCh2YWx1ZSwgb2JqVmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHZhbHVlcztcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGV4dHJhY3RWYWx1ZXNGb3JDb2x1bW4oZGltczogSVBpdm90RGltZW5zaW9uW10sIHJlY0RhdGE6IGFueSwgcGl2b3RLZXlzOiBJUGl2b3RLZXlzLCBwYXRoID0gW10pIHtcbiAgICAgICAgY29uc3QgdmFscyA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XG4gICAgICAgIGxldCBsdmxDb2xsZWN0aW9uID0gdmFscztcbiAgICAgICAgY29uc3QgZmxhdHRlbmVkRGltcyA9IHRoaXMuZmxhdHRlbihkaW1zKTtcbiAgICAgICAgZm9yIChjb25zdCBjb2wgb2YgZmxhdHRlbmVkRGltcykge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmV4dHJhY3RWYWx1ZUZyb21EaW1lbnNpb24oY29sLCByZWNEYXRhKTtcbiAgICAgICAgICAgIHBhdGgucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IHBhdGguam9pbihwaXZvdEtleXMuY29sdW1uRGltZW5zaW9uU2VwYXJhdG9yKTtcbiAgICAgICAgICAgIGNvbnN0IG5ld09iaiA9IHsgdmFsdWU6IG5ld1ZhbHVlLCBleHBhbmRhYmxlOiBjb2wuZXhwYW5kYWJsZSwgY2hpbGRyZW46IG51bGwsIGRpbWVuc2lvbjogY29sIH07XG4gICAgICAgICAgICBpZiAoIW5ld09iai5jaGlsZHJlbikge1xuICAgICAgICAgICAgICAgIG5ld09iai5jaGlsZHJlbiA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsdmxDb2xsZWN0aW9uLnNldChuZXdWYWx1ZSwgbmV3T2JqKTtcbiAgICAgICAgICAgIGx2bENvbGxlY3Rpb24gPSBuZXdPYmouY2hpbGRyZW47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHM7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBmbGF0dGVuKGFyciwgbHZsID0gMCkge1xuICAgICAgICBjb25zdCBuZXdBcnIgPSBhcnIucmVkdWNlKChhY2MsIGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGl0ZW0ubGV2ZWwgPSBsdmw7XG4gICAgICAgICAgICBhY2MucHVzaChpdGVtKTtcbiAgICAgICAgICAgIGlmIChpdGVtLmNoaWxkTGV2ZWwpIHtcbiAgICAgICAgICAgICAgICBpdGVtLmV4cGFuZGFibGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGFjYyA9IGFjYy5jb25jYXQodGhpcy5mbGF0dGVuKFtpdGVtLmNoaWxkTGV2ZWxdLCBsdmwgKyAxKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9LCBbXSk7XG4gICAgICAgIHJldHVybiBuZXdBcnI7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBhcHBseUFnZ3JlZ2F0aW9ucyhyZWM6IElQaXZvdEdyaWRSZWNvcmQsIGhpZXJhcmNoaWVzLCB2YWx1ZXMsIHBpdm90S2V5czogSVBpdm90S2V5cykge1xuICAgICAgICBpZiAoaGllcmFyY2hpZXMuc2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgLy8gbm8gY29sdW1uIGdyb3Vwc1xuICAgICAgICAgICAgY29uc3QgYWdncmVnYXRpb25SZXN1bHQgPSB0aGlzLmFnZ3JlZ2F0ZShyZWMucmVjb3JkcywgdmFsdWVzKTtcbiAgICAgICAgICAgIHRoaXMuYXBwbHlBZ2dyZWdhdGlvblJlY29yZERhdGEoYWdncmVnYXRpb25SZXN1bHQsIHVuZGVmaW5lZCwgcmVjLCBwaXZvdEtleXMpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGhpZXJhcmNoaWVzLmZvckVhY2goKGhpZXJhcmNoeSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBoaWVyYXJjaHlbcGl2b3RLZXlzLmNoaWxkcmVuXTtcbiAgICAgICAgICAgIGlmIChjaGlsZHJlbiAmJiBjaGlsZHJlbi5zaXplID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwbHlBZ2dyZWdhdGlvbnMocmVjLCBjaGlsZHJlbiwgdmFsdWVzLCBwaXZvdEtleXMpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkUmVjb3JkcyA9IHRoaXMuY29sbGVjdFJlY29yZHMoY2hpbGRyZW4sIHBpdm90S2V5cyk7XG4gICAgICAgICAgICAgICAgaGllcmFyY2h5W3Bpdm90S2V5cy5hZ2dyZWdhdGlvbnNdID0gdGhpcy5hZ2dyZWdhdGUoY2hpbGRSZWNvcmRzLCB2YWx1ZXMpO1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwbHlBZ2dyZWdhdGlvblJlY29yZERhdGEoaGllcmFyY2h5W3Bpdm90S2V5cy5hZ2dyZWdhdGlvbnNdLCBoaWVyYXJjaHkudmFsdWUsIHJlYywgcGl2b3RLZXlzKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaGllcmFyY2h5W3Bpdm90S2V5cy5yZWNvcmRzXSkge1xuICAgICAgICAgICAgICAgIGhpZXJhcmNoeVtwaXZvdEtleXMuYWdncmVnYXRpb25zXSA9IHRoaXMuYWdncmVnYXRlKGhpZXJhcmNoeVtwaXZvdEtleXMucmVjb3Jkc10sIHZhbHVlcyk7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBseUFnZ3JlZ2F0aW9uUmVjb3JkRGF0YShoaWVyYXJjaHlbcGl2b3RLZXlzLmFnZ3JlZ2F0aW9uc10sIGhpZXJhcmNoeS52YWx1ZSwgcmVjLCBwaXZvdEtleXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgc3RhdGljIGFwcGx5QWdncmVnYXRpb25SZWNvcmREYXRhKGFnZ3JlZ2F0aW9uRGF0YTogYW55LCBncm91cE5hbWU6IHN0cmluZywgcmVjOiBJUGl2b3RHcmlkUmVjb3JkLCBwaXZvdEtleXM6IElQaXZvdEtleXMpIHtcbiAgICAgICAgY29uc3QgYWdncmVnYXRpb25LZXlzID0gT2JqZWN0LmtleXMoYWdncmVnYXRpb25EYXRhKTtcbiAgICAgICAgaWYgKGFnZ3JlZ2F0aW9uS2V5cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICBhZ2dyZWdhdGlvbktleXMuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWdncmVnYXRpb25LZXkgPSBncm91cE5hbWUgPyBncm91cE5hbWUgKyBwaXZvdEtleXMuY29sdW1uRGltZW5zaW9uU2VwYXJhdG9yICsga2V5IDoga2V5O1xuICAgICAgICAgICAgICAgIHJlYy5hZ2dyZWdhdGlvblZhbHVlcy5zZXQoYWdncmVnYXRpb25LZXksIGFnZ3JlZ2F0aW9uRGF0YVtrZXldKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgIGlmIChhZ2dyZWdhdGlvbktleXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBjb25zdCBhZ2dyZWdhdGlvbktleSA9IGFnZ3JlZ2F0aW9uS2V5c1swXTtcbiAgICAgICAgICAgIHJlYy5hZ2dyZWdhdGlvblZhbHVlcy5zZXQoZ3JvdXBOYW1lIHx8IGFnZ3JlZ2F0aW9uS2V5LCBhZ2dyZWdhdGlvbkRhdGFbYWdncmVnYXRpb25LZXldKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgYWdncmVnYXRlKHJlY29yZHMsIHZhbHVlczogSVBpdm90VmFsdWVbXSkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBwaXZvdFZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgICAgICAgY29uc3QgYWdncmVnYXRvciA9IFBpdm90VXRpbC5nZXRBZ2dyZWdhdG9yRm9yVHlwZShwaXZvdFZhbHVlLmFnZ3JlZ2F0ZSwgcGl2b3RWYWx1ZS5kYXRhVHlwZSk7XG4gICAgICAgICAgICBpZiAoIWFnZ3JlZ2F0b3IpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBDdXJyZW50UmVzb3VyY2VTdHJpbmdzLkdyaWRSZXNTdHJpbmdzLmlneF9ncmlkX3Bpdm90X25vX2FnZ3JlZ2F0b3IucmVwbGFjZShcInswfVwiLCBwaXZvdFZhbHVlLm1lbWJlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHRbcGl2b3RWYWx1ZS5tZW1iZXJdID0gYWdncmVnYXRvcihyZWNvcmRzLm1hcChyID0+IHJbcGl2b3RWYWx1ZS5tZW1iZXJdKSwgcmVjb3Jkcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0QWdncmVnYXRvckZvclR5cGUoYWdncmVnYXRlOiBJUGl2b3RBZ2dyZWdhdG9yLCBkYXRhVHlwZTogR3JpZENvbHVtbkRhdGFUeXBlKSB7XG4gICAgICAgIGxldCBhZ2dyZWdhdG9yID0gYWdncmVnYXRlLmFnZ3JlZ2F0b3I7XG4gICAgICAgIGlmIChhZ2dyZWdhdGUuYWdncmVnYXRvck5hbWUpIHtcbiAgICAgICAgICAgIGxldCBhZ2dyZWdhdG9ycyA9IElneFBpdm90TnVtZXJpY0FnZ3JlZ2F0ZS5hZ2dyZWdhdG9ycygpO1xuICAgICAgICAgICAgaWYgKCFkYXRhVHlwZSB8fCBkYXRhVHlwZSA9PT0gJ2RhdGUnIHx8IGRhdGFUeXBlID09PSAnZGF0ZVRpbWUnKSB7XG4gICAgICAgICAgICAgICAgYWdncmVnYXRvcnMgPSBhZ2dyZWdhdG9ycy5jb25jYXQoSWd4UGl2b3REYXRlQWdncmVnYXRlLmFnZ3JlZ2F0b3JzKCkpXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGRhdGFUeXBlID09PSAndGltZScpIHtcbiAgICAgICAgICAgICAgICBhZ2dyZWdhdG9ycyA9IGFnZ3JlZ2F0b3JzLmNvbmNhdChJZ3hQaXZvdFRpbWVBZ2dyZWdhdGUuYWdncmVnYXRvcnMoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhZ2dyZWdhdG9yID0gYWdncmVnYXRvcnMuZmluZCh4ID0+IHgua2V5ID09PSBhZ2dyZWdhdGUuYWdncmVnYXRvck5hbWUpPy5hZ2dyZWdhdG9yO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhZ2dyZWdhdG9yO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgcHJvY2Vzc0hpZXJhcmNoeShoaWVyYXJjaGllcywgcGl2b3RLZXlzLCBsZXZlbCA9IDAsIHJvb3REYXRhID0gZmFsc2UpOiBJUGl2b3RHcmlkUmVjb3JkW10ge1xuICAgICAgICBjb25zdCBmbGF0RGF0YTogSVBpdm90R3JpZFJlY29yZFtdID0gW107XG4gICAgICAgIGhpZXJhcmNoaWVzLmZvckVhY2goKGgsIGtleSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZmllbGQgPSBoLmRpbWVuc2lvbi5tZW1iZXJOYW1lO1xuICAgICAgICAgICAgY29uc3QgcmVjOiBJUGl2b3RHcmlkUmVjb3JkID0ge1xuICAgICAgICAgICAgICAgIGRpbWVuc2lvblZhbHVlczogbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKSxcbiAgICAgICAgICAgICAgICBhZ2dyZWdhdGlvblZhbHVlczogbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKSxcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogbmV3IE1hcDxzdHJpbmcsIElQaXZvdEdyaWRSZWNvcmRbXT4oKSxcbiAgICAgICAgICAgICAgICBkaW1lbnNpb25zOiBbaC5kaW1lbnNpb25dXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmVjLmRpbWVuc2lvblZhbHVlcy5zZXQoZmllbGQsIGtleSk7XG4gICAgICAgICAgICBpZiAoaFtwaXZvdEtleXMucmVjb3Jkc10pIHtcbiAgICAgICAgICAgICAgICByZWMucmVjb3JkcyA9IHRoaXMuZ2V0RGlyZWN0TGVhZnMoaFtwaXZvdEtleXMucmVjb3Jkc10pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVjLmxldmVsID0gbGV2ZWw7XG4gICAgICAgICAgICBmbGF0RGF0YS5wdXNoKHJlYyk7XG4gICAgICAgICAgICBpZiAoaFtwaXZvdEtleXMuY2hpbGRyZW5dICYmIGhbcGl2b3RLZXlzLmNoaWxkcmVuXS5zaXplID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5lc3RlZERhdGEgPSB0aGlzLnByb2Nlc3NIaWVyYXJjaHkoaFtwaXZvdEtleXMuY2hpbGRyZW5dLFxuICAgICAgICAgICAgICAgICAgICBwaXZvdEtleXMsIGxldmVsICsgMSwgcm9vdERhdGEpO1xuICAgICAgICAgICAgICAgIHJlYy5yZWNvcmRzID0gdGhpcy5nZXREaXJlY3RMZWFmcyhuZXN0ZWREYXRhKTtcbiAgICAgICAgICAgICAgICByZWMuY2hpbGRyZW4uc2V0KGZpZWxkLCBuZXN0ZWREYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGZsYXREYXRhO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0RGlyZWN0TGVhZnMocmVjb3JkczogSVBpdm90R3JpZFJlY29yZFtdKSB7XG4gICAgICAgIGxldCBsZWFmcyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHJlYyBvZiByZWNvcmRzKSB7XG4gICAgICAgICAgICBpZiAocmVjLnJlY29yZHMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gcmVjLnJlY29yZHMuZmlsdGVyKHggPT4gIXgucmVjb3JkcyAmJiBsZWFmcy5pbmRleE9mKHgpID09PSAtMSk7XG4gICAgICAgICAgICAgICAgbGVhZnMgPSBsZWFmcy5jb25jYXQoZGF0YSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxlYWZzLnB1c2gocmVjKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbGVhZnM7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBnZXRSZWNvcmRLZXkocmVjOiBJUGl2b3RHcmlkUmVjb3JkLCBjdXJyZW50RGltOiBJUGl2b3REaW1lbnNpb24sKSB7XG4gICAgICAgIGNvbnN0IHBhcmVudEZpZWxkcyA9IFtdO1xuICAgICAgICBjb25zdCBjdXJyZW50RGltSW5kZXggPSByZWMuZGltZW5zaW9ucy5maW5kSW5kZXgoeCA9PiB4Lm1lbWJlck5hbWUgPT09IGN1cnJlbnREaW0ubWVtYmVyTmFtZSkgKyAxO1xuICAgICAgICBjb25zdCBwcmV2RGltcyA9IHJlYy5kaW1lbnNpb25zLnNsaWNlKDAsIGN1cnJlbnREaW1JbmRleCk7XG4gICAgICAgIGZvciAoY29uc3QgcHJldiBvZiBwcmV2RGltcykge1xuICAgICAgICAgICAgY29uc3QgcHJldlZhbHVlID0gcmVjLmRpbWVuc2lvblZhbHVlcy5nZXQocHJldi5tZW1iZXJOYW1lKTtcbiAgICAgICAgICAgIHBhcmVudEZpZWxkcy5wdXNoKHByZXZWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhcmVudEZpZWxkcy5qb2luKCctJyk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBidWlsZEV4cHJlc3Npb25UcmVlKGNvbmZpZzogSVBpdm90Q29uZmlndXJhdGlvbikge1xuICAgICAgICBjb25zdCBhbGxEaW1lbnNpb25zID0gKGNvbmZpZz8ucm93cyB8fCBbXSkuY29uY2F0KChjb25maWc/LmNvbHVtbnMgfHwgW10pKS5jb25jYXQoY29uZmlnPy5maWx0ZXJzIHx8IFtdKS5maWx0ZXIoeCA9PiB4ICE9PSBudWxsICYmIHggIT09IHVuZGVmaW5lZCk7XG4gICAgICAgIGNvbnN0IGVuYWJsZWREaW1lbnNpb25zID0gYWxsRGltZW5zaW9ucy5maWx0ZXIoeCA9PiB4ICYmIHguZW5hYmxlZCk7XG5cbiAgICAgICAgY29uc3QgZXhwcmVzc2lvbnNUcmVlID0gbmV3IEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZShGaWx0ZXJpbmdMb2dpYy5BbmQpO1xuICAgICAgICAvLyBhZGQgZXhwcmVzc2lvbiB0cmVlcyBmcm9tIGFsbCBmaWx0ZXJzXG4gICAgICAgIFBpdm90VXRpbC5mbGF0dGVuKGVuYWJsZWREaW1lbnNpb25zKS5mb3JFYWNoKCh4OiBJUGl2b3REaW1lbnNpb24pID0+IHtcbiAgICAgICAgICAgIGlmICh4LmZpbHRlciAmJiB4LmZpbHRlci5maWx0ZXJpbmdPcGVyYW5kcykge1xuICAgICAgICAgICAgICAgIGV4cHJlc3Npb25zVHJlZS5maWx0ZXJpbmdPcGVyYW5kcy5wdXNoKC4uLnguZmlsdGVyLmZpbHRlcmluZ09wZXJhbmRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGV4cHJlc3Npb25zVHJlZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBjb2xsZWN0UmVjb3JkcyhjaGlsZHJlbiwgcGl2b3RLZXlzOiBJUGl2b3RLZXlzKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgY2hpbGRyZW4uZm9yRWFjaCh2YWx1ZSA9PiByZXN1bHQgPSByZXN1bHQuY29uY2F0KHZhbHVlW3Bpdm90S2V5cy5yZWNvcmRzXSkpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGFwcGx5SGllcmFyY2h5Q2hpbGRyZW4oaGllcmFyY2h5LCB2YWwsIHJlYywgcGl2b3RLZXlzOiBJUGl2b3RLZXlzKSB7XG4gICAgICAgIGNvbnN0IHJlY29yZHNLZXkgPSBwaXZvdEtleXMucmVjb3JkcztcbiAgICAgICAgY29uc3QgY2hpbGRLZXkgPSBwaXZvdEtleXMuY2hpbGRyZW47XG4gICAgICAgIGNvbnN0IGNoaWxkQ29sbGVjdGlvbiA9IHZhbFtjaGlsZEtleV07XG4gICAgICAgIGNvbnN0IGhpZXJhcmNoeVZhbHVlID0gaGllcmFyY2h5LmdldCh2YWwudmFsdWUpO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShoaWVyYXJjaHlWYWx1ZVtjaGlsZEtleV0pKSB7XG4gICAgICAgICAgICBoaWVyYXJjaHlWYWx1ZVtjaGlsZEtleV0gPSBuZXcgTWFwPHN0cmluZywgYW55PigpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY2hpbGRDb2xsZWN0aW9uIHx8IGNoaWxkQ29sbGVjdGlvbi5zaXplID09PSAwKSB7XG4gICAgICAgICAgICBjb25zdCBkaW0gPSBoaWVyYXJjaHlWYWx1ZS5kaW1lbnNpb247XG4gICAgICAgICAgICBjb25zdCBpc1ZhbGlkID0gdGhpcy5leHRyYWN0VmFsdWVGcm9tRGltZW5zaW9uKGRpbSwgcmVjKSA9PT0gdmFsLnZhbHVlO1xuICAgICAgICAgICAgaWYgKGlzVmFsaWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoaGllcmFyY2h5VmFsdWVbcmVjb3Jkc0tleV0pIHtcbiAgICAgICAgICAgICAgICAgICAgaGllcmFyY2h5VmFsdWVbcmVjb3Jkc0tleV0ucHVzaChyZWMpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGhpZXJhcmNoeVZhbHVlW3JlY29yZHNLZXldID0gW3JlY107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgaGllcmFyY2h5Q2hpbGQgPSBoaWVyYXJjaHlWYWx1ZVtjaGlsZEtleV07XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIGNoaWxkXSBvZiBjaGlsZENvbGxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICBsZXQgaGllcmFyY2h5Q2hpbGRWYWx1ZSA9IGhpZXJhcmNoeUNoaWxkLmdldChjaGlsZC52YWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFoaWVyYXJjaHlDaGlsZFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGhpZXJhcmNoeUNoaWxkLnNldChjaGlsZC52YWx1ZSwgY2hpbGQpO1xuICAgICAgICAgICAgICAgICAgICBoaWVyYXJjaHlDaGlsZFZhbHVlID0gY2hpbGQ7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGhpZXJhcmNoeUNoaWxkVmFsdWVbcmVjb3Jkc0tleV0pIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29weSA9IE9iamVjdC5hc3NpZ24oe30sIHJlYyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZWNbcmVjb3Jkc0tleV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vdCBhbGwgbmVzdGVkIGNoaWxkcmVuIGFyZSB2YWxpZFxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmVzdGVkVmFsdWUgPSBoaWVyYXJjaHlDaGlsZFZhbHVlLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGltZW5zaW9uID0gaGllcmFyY2h5Q2hpbGRWYWx1ZS5kaW1lbnNpb247XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWxpZFJlY3MgPSByZWNbcmVjb3Jkc0tleV0uZmlsdGVyKHggPT4gdGhpcy5leHRyYWN0VmFsdWVGcm9tRGltZW5zaW9uKGRpbWVuc2lvbiwgeCkgPT09IG5lc3RlZFZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvcHlbcmVjb3Jkc0tleV0gPSB2YWxpZFJlY3M7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaGllcmFyY2h5Q2hpbGRWYWx1ZVtyZWNvcmRzS2V5XS5wdXNoKGNvcHkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGhpZXJhcmNoeUNoaWxkVmFsdWVbcmVjb3Jkc0tleV0gPSBbcmVjXTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoY2hpbGRbY2hpbGRLZXldICYmIGNoaWxkW2NoaWxkS2V5XS5zaXplID4gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcGx5SGllcmFyY2h5Q2hpbGRyZW4oaGllcmFyY2h5Q2hpbGQsIGNoaWxkLCByZWMsIHBpdm90S2V5cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBnZXRBZ2dyZWdhdGVMaXN0KHZhbDogSVBpdm90VmFsdWUsIGdyaWQ6IFBpdm90R3JpZFR5cGUpOiBJUGl2b3RBZ2dyZWdhdG9yW10ge1xuICAgICAgICBpZiAoIXZhbC5hZ2dyZWdhdGVMaXN0KSB7XG4gICAgICAgICAgICBsZXQgZGVmYXVsdEFnZ3IgPSB0aGlzLmdldEFnZ3JlZ2F0b3JzRm9yVmFsdWUodmFsLCBncmlkKTtcbiAgICAgICAgICAgIGNvbnN0IGlzRGVmYXVsdCA9IGRlZmF1bHRBZ2dyLmZpbmQoXG4gICAgICAgICAgICAgICAgKHgpID0+IHgua2V5ID09PSB2YWwuYWdncmVnYXRlLmtleVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIC8vIHJlc29sdmUgY3VzdG9tIGFnZ3JlZ2F0aW9uc1xuICAgICAgICAgICAgaWYgKCFpc0RlZmF1bHQgJiYgZ3JpZC5kYXRhWzBdW3ZhbC5tZW1iZXJdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAvLyBpZiBmaWVsZCBleGlzdHMsIHRoZW4gd2UgY2FuIGFwcGx5IGRlZmF1bHQgYWdncmVnYXRpb25zIGFuZCBhZGQgdGhlIGN1c3RvbSBvbmUuXG4gICAgICAgICAgICAgICAgZGVmYXVsdEFnZ3IudW5zaGlmdCh2YWwuYWdncmVnYXRlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIWlzRGVmYXVsdCkge1xuICAgICAgICAgICAgICAgIC8vIG90aGVyd2lzZSB0aGlzIGlzIGEgY3VzdG9tIGFnZ3JlZ2F0aW9uIHRoYXQgaXMgbm90IGNvbXBhdGlibGVcbiAgICAgICAgICAgICAgICAvLyB3aXRoIHRoZSBkZWZhdWx0cywgc2luY2UgaXQgb3BlcmF0ZXMgb24gZmllbGQgdGhhdCBpcyBub3QgaW4gdGhlIGRhdGFcbiAgICAgICAgICAgICAgICAvLyBsZWF2ZSBvbmx5IHRoZSBjdXN0b20gb25lLlxuICAgICAgICAgICAgICAgIGRlZmF1bHRBZ2dyID0gW3ZhbC5hZ2dyZWdhdGVdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFsLmFnZ3JlZ2F0ZUxpc3QgPSBkZWZhdWx0QWdncjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsLmFnZ3JlZ2F0ZUxpc3Q7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBnZXRBZ2dyZWdhdG9yc0ZvclZhbHVlKHZhbHVlOiBJUGl2b3RWYWx1ZSwgZ3JpZDogUGl2b3RHcmlkVHlwZSk6IElQaXZvdEFnZ3JlZ2F0b3JbXSB7XG4gICAgICAgIGNvbnN0IGRhdGFUeXBlID0gdmFsdWUuZGF0YVR5cGUgfHwgZ3JpZC5yZXNvbHZlRGF0YVR5cGVzKGdyaWQuZGF0YVswXVt2YWx1ZS5tZW1iZXJdKTtcbiAgICAgICAgc3dpdGNoIChkYXRhVHlwZSkge1xuICAgICAgICAgICAgY2FzZSBHcmlkQ29sdW1uRGF0YVR5cGUuTnVtYmVyOlxuICAgICAgICAgICAgY2FzZSBHcmlkQ29sdW1uRGF0YVR5cGUuQ3VycmVuY3k6XG4gICAgICAgICAgICAgICAgcmV0dXJuIElneFBpdm90TnVtZXJpY0FnZ3JlZ2F0ZS5hZ2dyZWdhdG9ycygpO1xuICAgICAgICAgICAgY2FzZSBHcmlkQ29sdW1uRGF0YVR5cGUuRGF0ZTpcbiAgICAgICAgICAgIGNhc2UgR3JpZENvbHVtbkRhdGFUeXBlLkRhdGVUaW1lOlxuICAgICAgICAgICAgICAgIHJldHVybiBJZ3hQaXZvdERhdGVBZ2dyZWdhdGUuYWdncmVnYXRvcnMoKTtcbiAgICAgICAgICAgIGNhc2UgR3JpZENvbHVtbkRhdGFUeXBlLlRpbWU6XG4gICAgICAgICAgICAgICAgcmV0dXJuIElneFBpdm90VGltZUFnZ3JlZ2F0ZS5hZ2dyZWdhdG9ycygpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gSWd4UGl2b3RBZ2dyZWdhdGUuYWdncmVnYXRvcnMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG59XG4iXX0=
|