@ieeesa-npm/groups 0.12.4 → 0.12.6
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/esm2022/lib/components/tree-view/tree-view.component.mjs +8 -14
- package/esm2022/lib/groups.component.mjs +22 -13
- package/esm2022/lib/services/groups.service.mjs +6 -3
- package/fesm2022/ieeesa-npm-groups.mjs +32 -26
- package/fesm2022/ieeesa-npm-groups.mjs.map +1 -1
- package/lib/components/tree-view/tree-view.component.d.ts +1 -1
- package/lib/groups.component.d.ts +2 -2
- package/lib/services/groups.service.d.ts +1 -1
- package/package.json +1 -1
|
@@ -481,9 +481,12 @@ export class GroupsService {
|
|
|
481
481
|
* @return {Observable<GetGroupUsersResponse>}
|
|
482
482
|
* @memberof GroupsService
|
|
483
483
|
*/
|
|
484
|
-
groupsByNameAcronym(searchTerm) {
|
|
484
|
+
groupsByNameAcronym(searchTerm, filteredGroupType) {
|
|
485
|
+
const searchGroupsUrl = `${this.apiBaseUrl}/groups/groupsByNameAcronym?name=${searchTerm}`;
|
|
485
486
|
return this.httpService
|
|
486
|
-
.getData(
|
|
487
|
+
.getData(filteredGroupType
|
|
488
|
+
? searchGroupsUrl + `&groupType=${filteredGroupType}`
|
|
489
|
+
: searchGroupsUrl)
|
|
487
490
|
.pipe(map((response) => {
|
|
488
491
|
return response;
|
|
489
492
|
}), catchError((errorRes) => {
|
|
@@ -630,4 +633,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
630
633
|
providedIn: 'root',
|
|
631
634
|
}]
|
|
632
635
|
}], ctorParameters: function () { return [{ type: i1.HttpService }, { type: i2.UserPermissionsService }, { type: i3.GroupPermissionsMapService }, { type: i1.AlertsService }]; } });
|
|
633
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXBzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ncm91cHMvc3JjL2xpYi9zZXJ2aWNlcy9ncm91cHMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBYyxHQUFHLEVBQUUsVUFBVSxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQWFwRSxPQUFPLEtBQUssV0FBVyxNQUFNLDBCQUEwQixDQUFDO0FBYXhELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBa0J4RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBTXpELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUlqRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7Ozs7O0FBRXJEOzs7R0FHRztBQUlILE1BQU0sT0FBTyxhQUFhO0lBb0J4Qiw2REFBNkQ7SUFDN0Q7SUFDRSwwQ0FBMEM7SUFDbEMsV0FBd0I7SUFDaEMsMENBQTBDO0lBQ2xDLHNCQUE4QztJQUN0RCwwQ0FBMEM7SUFDbEMsdUJBQW1EO0lBQzNELDBDQUEwQztJQUNuQyxZQUEyQixDQUFDLDZDQUE2Qzs7UUFOeEUsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFFeEIsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUU5Qyw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQTRCO1FBRXBELGlCQUFZLEdBQVosWUFBWSxDQUFlO1FBNUJwQyxlQUFVLEdBQUcsV0FBVyxFQUFFLE1BQU0sQ0FBQztRQU9qQyxzQkFBaUIsR0FBRyxJQUFJLGVBQWUsQ0FDckMsaUJBQWlCLENBQUMsV0FBVyxDQUM5QixD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QWE7bUhBQWIsYUFBYSxjQUZaLE1BQU07OzRGQUVQLGFBQWE7a0JBSHpCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBtYXAsIGNhdGNoRXJyb3IsIEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge1xyXG4gIENyZWF0ZUdyb3VwUGF5bG9hZCxcclxuICBDcmVhdGVHcm91cFJlc3BvbnNlLFxyXG59IGZyb20gJy4uL21vZGVscy9jcmVhdGUtZ3JvdXAubW9kZWwnO1xyXG5pbXBvcnQge1xyXG4gIEJ1c2luZXNzUnVsZSxcclxuICBHcm91cFR5cGVDb25maWd1cmF0aW9uLFxyXG4gIEdyb3VwVHlwZUNvbmZpZ1ZhbHVlLFxyXG4gIEdyb3VwVHlwZVJlc3BvbnNlLFxyXG59IGZyb20gJy4uL21vZGVscy9ncm91cC10eXBlcy5tb2RlbCc7XHJcbmltcG9ydCB7IEFsZXJ0c1NlcnZpY2UsIEh0dHBTZXJ2aWNlIH0gZnJvbSAnQGllZWVzYS1ucG0vdXRpbGl0eSc7XHJcbmltcG9ydCB7IEdldEdyb3VwUmVzcG9uc2UsIEdldEdyb3Vwc1BheWxvYWQgfSBmcm9tICcuLi9tb2RlbHMvdmlldy1ncm91cC5tb2RlbCc7XHJcbmltcG9ydCAqIGFzIHNjcmVlblRleHRzIGZyb20gJy4uL2Fzc2V0cy9jb25zdGFudHMuanNvbic7XHJcbmltcG9ydCB7IERlbGV0ZUdyb3VwUGF5bG9hZCB9IGZyb20gJy4uL21vZGVscy9kZWxldGUtZ3JvdXAubW9kZWwnO1xyXG5pbXBvcnQgeyBHcm91cEluZm8gfSBmcm9tICcuLi9tb2RlbHMvZ3JvdXAtaW5mby5tb2RlbCc7XHJcbmltcG9ydCB7XHJcbiAgU2VhcmNoVXNlcnNQYXlsb2FkLFxyXG4gIEZpbHRlclVzZXJzUGF5bG9hZCxcclxuICBHZXRHcm91cFVzZXJzUmVzcG9uc2UsXHJcbiAgVXNlcixcclxuICBMb2dnZWRJblVzZXJJbmZvLFxyXG59IGZyb20gJy4uL21vZGVscy91c2VyLm1vZGVsJztcclxuaW1wb3J0IHsgUm9sZSB9IGZyb20gJy4uL21vZGVscy9yb2xlLm1vZGVsJztcclxuaW1wb3J0IHsgQ2hlY2tib3hPcHRpb24gfSBmcm9tICdAaWVlZXNhLW5wbS9wcmVzZW50YXRpb24nO1xyXG5pbXBvcnQgeyBFZGl0R3JvdXBQYXlsb2FkIH0gZnJvbSAnLi4vbW9kZWxzL2VkaXQtZ3JvdXAubW9kZWwnO1xyXG5pbXBvcnQgeyBHcm91cEZ1bmN0aW9uVHlwZSB9IGZyb20gJy4uL21vZGVscy9ncm91cC1mdW5jdGlvbi10eXBlLm1vZGVsJztcclxuaW1wb3J0IHsgUm9zdGVyRnVuY3Rpb25UeXBlIH0gZnJvbSAnLi4vbW9kZWxzL3Jvc3Rlci1mdW5jdGlvbi10eXBlLm1vZGVsJztcclxuaW1wb3J0IHsgR3JvdXBVc2VySW5mbyB9IGZyb20gJy4uL21vZGVscy9ncm91cC11c2VyLWluZm8ubW9kZWwnO1xyXG5pbXBvcnQge1xyXG4gIEFkZE9yRWRpdFVzZXJQYXlsb2FkLFxyXG4gIEFkZE9yRWRpdEdyb3VwVXNlckRldGFpbHNSZXNwb25zZSxcclxuICBBZGRPckVkaXRVc2VySW5kaXZpZHVhbFJvc3RlclBheWxvYWQsXHJcbn0gZnJvbSAnLi4vbW9kZWxzL2FkZC1vci1lZGl0LXVzZXItZ3JvdXAubW9kZWwnO1xyXG5pbXBvcnQgeyBEZWxldGVVc2VyR3JvdXBQYXlsb2FkIH0gZnJvbSAnLi4vbW9kZWxzL2RlbGV0ZS11c2VyLWdyb3VwLm1vZGVsJztcclxuaW1wb3J0IHtcclxuICBHZXRVc2VyRGV0YWlsc1BheWxvYWQsXHJcbiAgU2VhcmNoVXNlckJ5RW1haWxSZXNwb25zZSxcclxufSBmcm9tICcuLi9tb2RlbHMvYWRkLW5ldy11c2VyLm1vZGVsJztcclxuaW1wb3J0IHtcclxuICBPcmdhbml6YXRpb25SZXF1ZXN0UGF5bG9hZCxcclxuICBPcmdhbml6YXRpb25SZXNwb25zZSxcclxufSBmcm9tICcuLi9tb2RlbHMvb3JnYW5pemF0aW9uLm1vZGVsJztcclxuaW1wb3J0IHsgQ2xhc3NpZmljYXRpb25SZXNwb25zZSB9IGZyb20gJy4uL21vZGVscy9jbGFzc2lmaWNhdGlvbi5tb2RlbCc7XHJcbmltcG9ydCB7IEdyb3VwUm9zdGVyVHlwZSB9IGZyb20gJy4uL21vZGVscy9yb3N0ZXItdHlwZS5tb2RlbCc7XHJcbmltcG9ydCB7IEZvcm1TdGF0dXMgfSBmcm9tICcuLi9tb2RlbHMvZm9ybS1zdGF0dXMubW9kZWwnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbFN0YXR1cyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtcclxuICBHcm91cFBlcm1pc3Npb24sXHJcbiAgVXNlclBlcm1pc3Npb24sXHJcbn0gZnJvbSAnLi4vbW9kZWxzL2dyb3VwLXBlcm1pc3Npb25zLm1vZGVsJztcclxuaW1wb3J0IHsgUGVybWlzc2lvblR5cGUgfSBmcm9tICcuLi9tb2RlbHMvcGVybWlzc2lvbi10eXBlLm1vZGVsJztcclxuaW1wb3J0IHsgVXNlclBlcm1pc3Npb25zU2VydmljZSB9IGZyb20gJy4vdXNlci1wZXJtaXNzaW9ucy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgR3JvdXBQZXJtaXNzaW9uc01hcFNlcnZpY2UgfSBmcm9tICcuL2dyb3VwLXBlcm1pc3Npb25zLW1hcC1zZXJ2aWNlJztcclxuaW1wb3J0IHsgUGFyZW50R3JvdXBzSW5mbyB9IGZyb20gJy4uL21vZGVscy9wYXJlbnQtZ3JvdXBzLWluZm8ubW9kZWwnO1xyXG5pbXBvcnQgeyBSb2xlVHlwZSB9IGZyb20gJy4uL21vZGVscy9yb2xlLXR5cGUubW9kZWwnO1xyXG5cclxuLyoqXHJcbiAqIEdyb3VwcyBzZXJ2aWNlIGlzIGFuIGFic3RyYWN0IGxheWVyIGFuZCByZXNwb25zaWJsZSBmb3IgbWFuYWdpbmcgZ3JvdXBzIFJFU1QgQVBJIGNhbGxzLlxyXG4gKiBAY2xhc3MgR3JvdXBzU2VydmljZVxyXG4gKi9cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIEdyb3Vwc1NlcnZpY2Uge1xyXG4gIGdyb3Vwc1RleHQgPSBzY3JlZW5UZXh0cz8uZXJyb3JzO1xyXG4gIGFwaUJhc2VVcmwhOiBzdHJpbmc7XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICB1c2VyUGVybWlzc2lvbjogYW55O1xyXG4gIHNlbGVjdGVkR3JvdXBJbmZvITogR3JvdXBJbmZvIHwgdW5kZWZpbmVkO1xyXG4gIGdyb3VwRnVuY3Rpb25UeXBlITogR3JvdXBGdW5jdGlvblR5cGU7XHJcbiAgc2VsZWN0ZWRHcm91cFBhcmVudEluZm8hOiBHcm91cEluZm8gfCB1bmRlZmluZWQ7XHJcbiAgb3Blbk1vZGFsTm90aWZpZXIgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEdyb3VwRnVuY3Rpb25UeXBlPihcclxuICAgIEdyb3VwRnVuY3Rpb25UeXBlLlZJRVdfUk9TVEVSXHJcbiAgKTtcclxuICBncm91cFR5cGVSb2xlcyE6IENoZWNrYm94T3B0aW9uW107XHJcbiAgc2VsZWN0ZWRVc2VySW5mbyE6IEdyb3VwVXNlckluZm87XHJcbiAgY2FuU2hvd01lc3NhZ2UgPSBmYWxzZTtcclxuICByb3N0ZXJGdW5jdGlvblR5cGUhOiBSb3N0ZXJGdW5jdGlvblR5cGU7XHJcbiAgdXNlckdyb3VwUGVybWlzc2lvbnMhOiBHcm91cFBlcm1pc3Npb25bXTtcclxuICBncm91cFR5cGVzITogR3JvdXBUeXBlQ29uZmlndXJhdGlvbltdO1xyXG4gIGlzUGFyZW50R3JvdXBDaGFuZ2VkID0gZmFsc2U7XHJcbiAgdXNlckluZm8hOiBMb2dnZWRJblVzZXJJbmZvO1xyXG4gIG1lbWJlclR5cGVzITogUm9sZVtdO1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lbXB0eS1mdW5jdGlvbiwgbm8tdW51c2VkLXZhcnNcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHJpdmF0ZSBodHRwU2VydmljZTogSHR0cFNlcnZpY2UsXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHByaXZhdGUgdXNlclBlcm1pc3Npb25zU2VydmljZTogVXNlclBlcm1pc3Npb25zU2VydmljZSxcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHJpdmF0ZSBncm91cFBlcm1pc3Npb25zU2VydmljZTogR3JvdXBQZXJtaXNzaW9uc01hcFNlcnZpY2UsXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHB1YmxpYyBhbGVydFNlcnZpY2U6IEFsZXJ0c1NlcnZpY2UgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5LWZ1bmN0aW9uXHJcbiAgKSB7fVxyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgc2V0QXBwQ29uZmlnKGFwaUJhc2VVcmw6IHN0cmluZywgdXNlclBlcm1pc3Npb246IGFueSkge1xyXG4gICAgdGhpcy5hcGlCYXNlVXJsID0gYXBpQmFzZVVybDtcclxuICAgIHRoaXMudXNlclBlcm1pc3Npb24gPSB1c2VyUGVybWlzc2lvbjtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogR2V0cyBhcHBsaWNhdGlvbiBncm91cCB0eXBlcyBmcm9tIEFQSSBhbmQgcmV0dXJucyBpdCBhcyBhbiBvYnNlcnZhYmxlLlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8R3JvdXBUeXBlUmVzcG9uc2U+fSAtSXQgcmV0dXJucyBncm91cCB0eXBlcyBpZiBzdWNjZXNzIGVsc2UgZXJyb3IuXHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gIGdldEdyb3VwVHlwZXMoKTogT2JzZXJ2YWJsZTxHcm91cFR5cGVSZXNwb25zZT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2VcclxuICAgICAgLmdldERhdGEoYCR7dGhpcy5hcGlCYXNlVXJsfS9ncm91cHMvY29uZmlnL2dyb3VwVHlwZUNvbmZpZ0luZm9gKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNldExvYWRlZEdyb3VwVHlwZXMocmVzcG9uc2U/LmJvZHkpO1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGFsbG93ZWQgcGFyZW50IGdyb3VwcyBmcm9tIEFQSSBhbmQgcmV0dXJucyBpdCBhcyBhbiBvYnNlcnZhYmxlLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBncm91cElkXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxHcm91cFR5cGVSZXNwb25zZT59XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBnZXRBbGxvd2VkUGFyZW50R3JvdXBzKGdyb3VwSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8UGFyZW50R3JvdXBzSW5mb1tdPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAuZ2V0RGF0YShgJHt0aGlzLmFwaUJhc2VVcmx9L2dyb3Vwcy9hbGxvd2VkUGFyZW50R3JvdXBzLyR7Z3JvdXBJZH1gKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2U/LmJvZHk7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcclxuICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIGFsbCB0aGUgZ3JvdXBzIGJhc2VkIG9uIHBhc3NlZCBncm91cCBJZCBhbmQgZ3JvdXAgdHlwZS5cclxuICAgKiBAcGFyYW0ge0dldEdyb3Vwc1BheWxvYWR9IGdldEdyb3Vwc1BheWxvYWRcclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPEdldEdyb3VwUmVzcG9uc2U+fVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ2V0R3JvdXBzKGdldEdyb3Vwc1BheWxvYWQ6IEdldEdyb3Vwc1BheWxvYWQpOiBPYnNlcnZhYmxlPEdldEdyb3VwUmVzcG9uc2U+IHtcclxuICAgIGxldCB1cmwgPSAncm9vdEdyb3Vwcyc7XHJcbiAgICBpZiAoZ2V0R3JvdXBzUGF5bG9hZC5ncm91cElkKVxyXG4gICAgICB1cmwgPSAnaW1tQ2hpbGRHcm91cHNCeUdyb3VwSWQvJyArIGdldEdyb3Vwc1BheWxvYWQuZ3JvdXBJZDtcclxuICAgIGVsc2UgaWYgKGdldEdyb3Vwc1BheWxvYWQuZ3JvdXBUeXBlSWQpXHJcbiAgICAgIHVybCA9ICdncm91cHNCeUdyb3VwVHlwZS8nICsgZ2V0R3JvdXBzUGF5bG9hZC5ncm91cFR5cGVJZDtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZS5nZXREYXRhKGAke3RoaXMuYXBpQmFzZVVybH0vZ3JvdXBzLyR7dXJsfWApLnBpcGUoXHJcbiAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgIH0pLFxyXG4gICAgICBjYXRjaEVycm9yKChlcnJvclJlcykgPT4ge1xyXG4gICAgICAgIHRocm93IGVycm9yUmVzO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogRGVsZXRlcyBhIGdyb3VwIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBpbmZvcm1hdGlvblxyXG4gICAqIEBwYXJhbSB7Z3JvdXBJZH0gc3RyaW5nIC1ncm91cElkIG9mIHRoZSBncm91cCB3aGljaCBpcyB0byBiZSBkZWxldGVkXHJcbiAgICogQHJldHVybiB7Kn0gIHtPYnNlcnZhYmxlPGFueT59IC1PYnNlcnZhYmxlIHJlcHJlc2VudGluZyB0aGUgZ3JvdXAgZGVsZXRpb24gcmVzcG9uc2VcclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgZGVsZXRlR3JvdXAoZGVsZXRlR3JvdXBQYXlsb2FkOiBEZWxldGVHcm91cFBheWxvYWQpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2VcclxuICAgICAgLnB1dERhdGEoYCR7dGhpcy5hcGlCYXNlVXJsfS9ncm91cHMvZGVsZXRlYCwgZGVsZXRlR3JvdXBQYXlsb2FkKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcclxuICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIERlbGV0ZXMgYSB1c2VyIGZyb20gZ3JvdXAgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGluZm9ybWF0aW9uXHJcbiAgICogQHBhcmFtIHtncm91cElkfSBzdHJpbmcgLWdyb3VwSWQgb2YgdGhlIHNlbGVjdGVkIGdyb3VwIGZyb20gd2hlcmUgc2VsZWN0ZWQgdXNlciB0byBiZSBkZWxldGVkLlxyXG4gICAqIEBwYXJhbSB7dXNlcklkfSBBcnJheSAtdXNlciBpZHMgb2Ygc2VsZWN0ZWQgdXNlcnMgd2hvIGFyZSBkZWxldGVkIGZyb20gdGhlIHNlbGVjdGVkIGdyb3VwXHJcbiAgICogQHJldHVybiB7Kn0gIHtPYnNlcnZhYmxlPGFueT59IC1PYnNlcnZhYmxlIHJlcHJlc2VudGluZyB0aGUgZ3JvdXAgZGVsZXRpb24gcmVzcG9uc2VcclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgZGVsZXRlVXNlcnNHcm91cChcclxuICAgIGRlbGV0ZVVzZXJHcm91cFBheWxvYWQ6IERlbGV0ZVVzZXJHcm91cFBheWxvYWRcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlXHJcbiAgICAgIC5wdXREYXRhKFxyXG4gICAgICAgIGAke3RoaXMuYXBpQmFzZVVybH0vZ3JvdXBzL3Jvc3Rlci9kZWxldGVHcm91cFVzZXJzYCxcclxuICAgICAgICBkZWxldGVVc2VyR3JvdXBQYXlsb2FkXHJcbiAgICAgIClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUG9zdHMgY3JlYXRlIGdyb3VwIGZvcm0gZGF0YSB0byBzZXJ2ZXIgdXNpbmcgSHR0cFNlcnZpY2UgZm9yIGNyZWF0aW5nIG5ldyBncm91cC5cclxuICAgKiBAcGFyYW0ge0NyZWF0ZUdyb3VwUGF5bG9hZH0gY3JlYXRlR3JvdXBQYXlsb2FkIC1jcmVhdGUgZ3JvdXAgZm9ybSBkYXRhIHdoaWNoIGluY2x1ZGVzIGdyb3VwIG5hbWUsIHR5cGUsIHNob3J0IG5hbWUsIHNjb3BlLlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8Q3JlYXRlR3JvdXBSZXNwb25zZT59IC1yZXR1cm5zIGNyZWF0ZSBncm91cCBBUEkgcmVzcG9uc2UgKHN1Y2Nlc3Mgb3IgZXJyb3IpIGFzIGFuIG9ic2VydmFibGUuXHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gIGNyZWF0ZUdyb3VwKFxyXG4gICAgY3JlYXRlR3JvdXBQYXlsb2FkOiBDcmVhdGVHcm91cFBheWxvYWRcclxuICApOiBPYnNlcnZhYmxlPENyZWF0ZUdyb3VwUmVzcG9uc2U+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlXHJcbiAgICAgIC5wb3N0RGF0YShgJHt0aGlzLmFwaUJhc2VVcmx9L2dyb3Vwcy9jcmVhdGVgLCBjcmVhdGVHcm91cFBheWxvYWQpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZXMgZ3JvdXAgZm9ybSBkYXRhIHRvIHNlcnZlciB1c2luZyBIdHRwU2VydmljZS5cclxuICAgKiBAcGFyYW0ge0VkaXRHcm91cFBheWxvYWR9IGVkaXRHcm91cFBheWxvYWQgLWVkaXQgZ3JvdXAgZm9ybSBkYXRhIHdoaWNoIGluY2x1ZGVzIGdyb3VwIG5hbWUsIHNob3J0IG5hbWUsIHNjb3BlLlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8RWRpdEdyb3VwUGF5bG9hZD59IC1yZXR1cm5zIGVkaXQgZ3JvdXAgQVBJIHJlc3BvbnNlIChzdWNjZXNzIG9yIGVycm9yKSBhcyBhbiBvYnNlcnZhYmxlLlxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZWRpdEdyb3VwKFxyXG4gICAgZWRpdEdyb3VwUGF5bG9hZDogRWRpdEdyb3VwUGF5bG9hZFxyXG4gICk6IE9ic2VydmFibGU8Q3JlYXRlR3JvdXBSZXNwb25zZT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2VcclxuICAgICAgLnB1dERhdGEoYCR7dGhpcy5hcGlCYXNlVXJsfS9ncm91cHMvZWRpdGAsIGVkaXRHcm91cFBheWxvYWQpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoaXMgbWV0aG9kIHdpbGwgcGFyc2UgdGhlIGVycm9yIGNvZGVzIGFuZCByZXR1cm4gdGhlIHJlc3BlY3RpdmUgZXJyb3IgbWVzc2FnZSBmb3IgZWFjaCBjb2RlLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IGVycm9yQ29kZXNcclxuICAgKiBAcmV0dXJuIHtzdHJpbmdbXX0gZXJyb3JNZXNzYWdlXHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBwYXJzZUVycm9yTWVzc2FnZShlcnJvckNvZGVzOiBzdHJpbmdbXSkge1xyXG4gICAgY29uc3QgZXJyb3JNZXNzYWdlOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgZXJyb3JDb2Rlcz8uZm9yRWFjaCgoaXRlbTogc3RyaW5nLCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZUtleSA9IGVycm9yQ29kZXNbaW5kZXhdIGFzIGtleW9mIHR5cGVvZiB0aGlzLmdyb3Vwc1RleHQ7XHJcbiAgICAgIGVycm9yTWVzc2FnZS5wdXNoKHRoaXMuZ3JvdXBzVGV4dFtlcnJvck1lc3NhZ2VLZXldKTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgc2VsZWN0ZWQgZ3JvdXAgaW5mby5cclxuICAgKiBAcGFyYW0geyhHcm91cEluZm8gfCB1bmRlZmluZWQpfSBzZWxlY3RlZEdyb3VwSW5mbyAtc2VsZWN0ZWQgZ3JvdXAgaW5mby5cclxuICAgKiBAcGFyYW0geyhHcm91cEluZm8gfCB1bmRlZmluZWQpfSBbc2VsZWN0ZWRHcm91cFBhcmVudEluZm9dIC1zZWxlY3RlZCBwYXJlbnQgZ3JvdXAgaW5mby5cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIHNldFNlbGVjdGVkR3JvdXBJbmZvKFxyXG4gICAgc2VsZWN0ZWRHcm91cEluZm86IEdyb3VwSW5mbyB8IHVuZGVmaW5lZCxcclxuICAgIHNlbGVjdGVkR3JvdXBQYXJlbnRJbmZvPzogR3JvdXBJbmZvIHwgdW5kZWZpbmVkXHJcbiAgKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkR3JvdXBJbmZvID0gc2VsZWN0ZWRHcm91cEluZm87XHJcbiAgICB0aGlzLnNlbGVjdGVkR3JvdXBQYXJlbnRJbmZvID0gc2VsZWN0ZWRHcm91cFBhcmVudEluZm87XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBzZWxlY3RlZCBncm91cCBpbmZvLlxyXG4gICAqIEByZXR1cm4geyhHcm91cEluZm8gfCB1bmRlZmluZWQpfSAtZ3JvdXAgaW5mby5cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIGdldFNlbGVjdGVkR3JvdXBJbmZvKCk6IEdyb3VwSW5mbyB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEdyb3VwSW5mbztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIHNlbGVjdGVkIGdyb3VwIHBhcmVudCBncm91cCBpbmZvLlxyXG4gICAqIEByZXR1cm4geyhHcm91cEluZm8gfCB1bmRlZmluZWQpfSAtZ3JvdXAgaW5mby5cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIGdldFNlbGVjdGVkR3JvdXBQYXJlbnRJbmZvKCk6IEdyb3VwSW5mbyB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEdyb3VwUGFyZW50SW5mbztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgZ3JvdXAgZnVuY3Rpb24gdHlwZS5cclxuICAgKiBAcGFyYW0ge0dyb3VwRnVuY3Rpb25UeXBlfSBncm91cEZ1bmN0aW9uVHlwZSAtZ3JvdXAgZnVuY3Rpb24gdHlwZS5cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIHNldEdyb3VwRnVuY3Rpb25UeXBlKGdyb3VwRnVuY3Rpb25UeXBlOiBHcm91cEZ1bmN0aW9uVHlwZSk6IHZvaWQge1xyXG4gICAgdGhpcy5ncm91cEZ1bmN0aW9uVHlwZSA9IGdyb3VwRnVuY3Rpb25UeXBlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyBncm91cCBmdW5jdGlvbiB0eXBlLlxyXG4gICAqIEByZXR1cm4ge0dyb3VwRnVuY3Rpb25UeXBlfSAtZ3JvdXAgZnVuY3Rpb24gdHlwZS5cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIGdldEdyb3VwRnVuY3Rpb25UeXBlKCk6IEdyb3VwRnVuY3Rpb25UeXBlIHtcclxuICAgIHJldHVybiB0aGlzLmdyb3VwRnVuY3Rpb25UeXBlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgZ3JvdXAgdXNlcnMgZm9yIHRoZSBnaXZlbiBncm91cCBpZC5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gZ3JvdXBJZFxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8R2V0R3JvdXBVc2Vyc1Jlc3BvbnNlPn1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gIGdldEdyb3VwVXNlcnMoXHJcbiAgICBncm91cElkOiBzdHJpbmcsXHJcbiAgICBzb3J0Q29sdW1uOiBzdHJpbmcsXHJcbiAgICBzb3J0RGlyZWN0aW9uOiBib29sZWFuXHJcbiAgKTogT2JzZXJ2YWJsZTxHZXRHcm91cFVzZXJzUmVzcG9uc2U+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlXHJcbiAgICAgIC5nZXREYXRhKFxyXG4gICAgICAgIGAke3RoaXMuYXBpQmFzZVVybH0vZ3JvdXBzL3Jvc3Rlci8ke2dyb3VwSWR9P3NvcnRDb2x1bW49JHtzb3J0Q29sdW1ufSZhc2NlbmRpbmdPcmRlcj0ke3NvcnREaXJlY3Rpb259YFxyXG4gICAgICApXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvclJlcykgPT4ge1xyXG4gICAgICAgICAgdGhyb3cgZXJyb3JSZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIGdyb3VwIHVzZXJzIGJhc2VkIG9uIHRoZSBmaWx0ZXJlZCByb2xlcy5cclxuICAgKiBAcGFyYW0ge0ZpbHRlclVzZXJzUGF5bG9hZH0gcGF5bG9hZFxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8R2V0R3JvdXBVc2Vyc1Jlc3BvbnNlPn1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIGdldEdyb3VwVXNlcnNCeVJvbGVzKFxyXG4gICAgcGF5bG9hZDogRmlsdGVyVXNlcnNQYXlsb2FkXHJcbiAgKTogT2JzZXJ2YWJsZTxHZXRHcm91cFVzZXJzUmVzcG9uc2U+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlXHJcbiAgICAgIC5wb3N0RGF0YShgJHt0aGlzLmFwaUJhc2VVcmx9L2dyb3Vwcy9yb3N0ZXIvZ3JvdXBVc2Vyc0ZpbHRlcmAsIHBheWxvYWQpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvclJlcykgPT4ge1xyXG4gICAgICAgICAgdGhyb3cgZXJyb3JSZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIGdyb3VwIHVzZXJzIGJhc2VkIG9uIHNlYXJjaGVkIG5hbWUgb3IgZW1haWxcclxuICAgKiBAcGFyYW0ge1NlYXJjaFVzZXJzUGF5bG9hZH0gcGF5bG9hZFxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8R2V0R3JvdXBVc2Vyc1Jlc3BvbnNlPn1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIHNlYXJjaEdyb3VwVXNlcnMoXHJcbiAgICBwYXlsb2FkOiBTZWFyY2hVc2Vyc1BheWxvYWRcclxuICApOiBPYnNlcnZhYmxlPEdldEdyb3VwVXNlcnNSZXNwb25zZT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2VcclxuICAgICAgLnBvc3REYXRhKGAke3RoaXMuYXBpQmFzZVVybH0vZ3JvdXBzL3Jvc3Rlci9ncm91cFVzZXJzU2VhcmNoYCwgcGF5bG9hZClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yUmVzKSA9PiB7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvclJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgZ3JvdXAgcm9sZXMgYmFzZWQgb24gdGhlIGdyb3VwIHR5cGUuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGdyb3VwVHlwZUlkXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxDaGVja2JveE9wdGlvbltdPn1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycywgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXHJcbiAgZ2V0R3JvdXBUeXBlUm9sZXMoZ3JvdXBUeXBlSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8Q2hlY2tib3hPcHRpb25bXT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2VcclxuICAgICAgLmdldERhdGEoXHJcbiAgICAgICAgYCR7dGhpcy5hcGlCYXNlVXJsfS9ncm91cHMvY29uZmlnL3JvbGVzQnlHcm91cFR5cGUvJHtncm91cFR5cGVJZH1gXHJcbiAgICAgIClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgY29uc3Qgcm9sZXNPcHRpb246IENoZWNrYm94T3B0aW9uW10gPSBbXTtcclxuICAgICAgICAgIGNvbnN0IG1lbWJlclR5cGVzOiBSb2xlW10gPSBbXTtcclxuICAgICAgICAgIHJlc3BvbnNlPy5ib2R5Py5mb3JFYWNoKChyb2xlOiBSb2xlKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyb2xlPy5yb2xlVHlwZU5hbWUgPT09IFJvbGVUeXBlLk1FTUJFUl9MRVZFTCkge1xyXG4gICAgICAgICAgICAgIG1lbWJlclR5cGVzLnB1c2gocm9sZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgcm9sZXNPcHRpb24ucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBpZDogcm9sZS5yb2xlSWQsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiByb2xlLnJvbGVOYW1lLFxyXG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgY2hlY2tlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgdGhpcy5zZXRHcm91cFR5cGVVc2VyUm9sZXMocm9sZXNPcHRpb24pO1xyXG4gICAgICAgICAgdGhpcy5zZXRNZW1iZXJUeXBlcyhtZW1iZXJUeXBlcyk7XHJcbiAgICAgICAgICByZXR1cm4gcm9sZXNPcHRpb247XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3JSZXMpID0+IHtcclxuICAgICAgICAgIHRocm93IGVycm9yUmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEZldGNoZXMgdGhlIGNsYXNzaWZpY2F0aW9ucyBtYXN0ZXIgZGF0YSBmcm9tIGNvbmZpZ3VyYXRpb24gYW5kIHJldHVybnMuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxDbGFzc2lmaWNhdGlvblJlc3BvbnNlPn1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIGdldENsYXNzaWZpY2F0aW9ucygpOiBPYnNlcnZhYmxlPENsYXNzaWZpY2F0aW9uUmVzcG9uc2U+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlXHJcbiAgICAgIC5nZXREYXRhKGAke3RoaXMuYXBpQmFzZVVybH0vZ3JvdXBzL3Jvc3Rlci9jbGFzc2lmaWNhdGlvbmApXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvclJlcykgPT4ge1xyXG4gICAgICAgICAgdGhyb3cgZXJyb3JSZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgdHJ1ZSBpZiBsb2dnZWQgaW4gdXNlciBpcyBhZG1pbi5cclxuICAgKiBAcmV0dXJuIHtib29sZWFufVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgaXNBZG1pblVzZXIoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy52YWxpZGF0ZUFjY2VzcyhQZXJtaXNzaW9uVHlwZS5NQU5BR0VfU1lTVEVNX1VTRVJTKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogQ29uY2F0ZW5hdGVzIHRoZSBncm91cCB1c2VycyBhc3NpZ25lZCByb2xlcyBuYW1lIHNlcGFyYXRlZCBieSBjb21tYSBhcyBzdHJpbmcgYW5kIHJldHVybnMgdGhlIGdyb3VwIHVzZXJzIGluIGFuIGFycmF5LlxyXG4gICAqIEBwYXJhbSB7R2V0R3JvdXBVc2Vyc1Jlc3BvbnNlfSByZXNwb25zZVxyXG4gICAqIEByZXR1cm4ge1VzZXJbXX1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIHRyYW5zZm9ybVVzZXJSb2xlc05hbWVBc1N0cmluZyhyZXNwb25zZTogR2V0R3JvdXBVc2Vyc1Jlc3BvbnNlKTogVXNlcltdIHtcclxuICAgIGNvbnN0IHVzZXJzOiBVc2VyW10gPSBbXTtcclxuICAgIHJlc3BvbnNlPy5ib2R5Py5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGNvbnN0IGNsYXNzaWZpY2F0aW9uRGVzYyA9XHJcbiAgICAgICAgaXRlbS5jbGFzc2lmaWNhdGlvbj8uY2xhc3NpZmljYXRpb25OYW1lICtcclxuICAgICAgICAnICgnICtcclxuICAgICAgICBpdGVtLmNsYXNzaWZpY2F0aW9uPy5jbGFzc2lmaWNhdGlvbkRlc2MgK1xyXG4gICAgICAgICcpJztcclxuICAgICAgY29uc3Qgcm9sZXNMaXN0ID0gaXRlbT8ucm9sZXNMaXN0Py5yZWR1Y2UoXHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgICAgICAocm9sZUxpc3Q6IGFueSwgcm9sZTogUm9sZSkgPT4ge1xyXG4gICAgICAgICAgcm9sZUxpc3RbXHJcbiAgICAgICAgICAgIHJvbGUucm9sZVR5cGVOYW1lID09PSBSb2xlVHlwZS5NRU1CRVJfTEVWRUwgPyAnbWVtYmVyVHlwZScgOiAncm9sZXMnXHJcbiAgICAgICAgICBdLnB1c2gocm9sZT8ucm9sZU5hbWUpO1xyXG4gICAgICAgICAgcmV0dXJuIHJvbGVMaXN0O1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgeyBtZW1iZXJUeXBlOiBbXSwgcm9sZXM6IFtdIH1cclxuICAgICAgKTtcclxuXHJcbiAgICAgIHVzZXJzLnB1c2goe1xyXG4gICAgICAgIHVzZXJJZDogaXRlbS51c2VySWQsXHJcbiAgICAgICAgbmFtZTogaXRlbS5uYW1lLFxyXG4gICAgICAgIGVtYWlsOiBpdGVtLmVtYWlsLFxyXG4gICAgICAgIHJvbGU6IHJvbGVzTGlzdD8ucm9sZXM/Lmxlbmd0aCA/IHJvbGVzTGlzdD8ucm9sZXM/LmpvaW4oJywgJykgOiBudWxsLFxyXG4gICAgICAgIGNsYXNzaWZpY2F0aW9uOiBpdGVtLmNsYXNzaWZpY2F0aW9uPy5jbGFzc2lmaWNhdGlvbklkXHJcbiAgICAgICAgICA/IGNsYXNzaWZpY2F0aW9uRGVzY1xyXG4gICAgICAgICAgOiBudWxsLFxyXG4gICAgICAgIG1lbWJlclN0YXR1czogcm9sZXNMaXN0Py5tZW1iZXJUeXBlPy5sZW5ndGhcclxuICAgICAgICAgID8gcm9sZXNMaXN0Py5tZW1iZXJUeXBlWzBdXHJcbiAgICAgICAgICA6IG51bGwsXHJcbiAgICAgICAgb3JnYW5pemF0aW9uOiBpdGVtLm9yZ2FuaXphdGlvbj8ub3JnTmFtZSA/PyBudWxsLFxyXG4gICAgICAgIGVtcGxveWVyOiBpdGVtLmVtcGxveWVyPy5vcmdOYW1lID8/IG51bGwsXHJcbiAgICAgICAgY2FuRGVsZXRlOiAhKFxyXG4gICAgICAgICAgaXRlbT8udXNlcklkID09PSB0aGlzLnVzZXJJbmZvPy51c2VySWQgJiZcclxuICAgICAgICAgIHRoaXMuaXNBZG1pblVzZXIoKSAmJlxyXG4gICAgICAgICAgdGhpcy5nZXRCdXNpbmVzc1J1bGVPZlNlbGVjdGVkR3JvdXAoKT8uaXNBZG1pblxyXG4gICAgICAgICksXHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gdXNlcnM7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgZm9ybWF0dGVkIGdyb3VwIHR5cGVzLlxyXG4gICAqIEBwYXJhbSB7R3JvdXBUeXBlQ29uZmlndXJhdGlvbltdfSBncm91cFR5cGVSZXNwb25zZVxyXG4gICAqIEByZXR1cm4ge0dyb3VwVHlwZUNvbmZpZ1ZhbHVlfVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ2V0Rm9ybWF0dGVkR3JvdXBUeXBlcyhcclxuICAgIGdyb3VwVHlwZVJlc3BvbnNlOiBHcm91cFR5cGVDb25maWd1cmF0aW9uW11cclxuICApOiBHcm91cFR5cGVDb25maWdWYWx1ZSB7XHJcbiAgICBjb25zdCBncm91cFR5cGVzOiBHcm91cFR5cGVDb25maWdWYWx1ZSA9IHt9O1xyXG4gICAgZ3JvdXBUeXBlUmVzcG9uc2UuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBncm91cFR5cGVzW2l0ZW0uY29uZmlnRmllbGRJZF0gPSBpdGVtLmNvbmZpZ0ZpZWxkVmFsdWU7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBncm91cFR5cGVzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyBncm91cCB1c2VyIGRldGFpbHMgaWYgZW1haWwgaXMgZm91bmQsIGVsc2UgdGhyb3dzIGVycm9yLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBlbWFpbFxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8U2VhcmNoVXNlckJ5RW1haWxSZXNwb25zZT59XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBnZXRVc2VyQnlFbWFpbChlbWFpbDogc3RyaW5nKTogT2JzZXJ2YWJsZTxTZWFyY2hVc2VyQnlFbWFpbFJlc3BvbnNlPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAuZ2V0RGF0YShgJHt0aGlzLmFwaUJhc2VVcmx9L2dyb3Vwcy91c2Vycy91c2VyQnlFbWFpbC8ke2VtYWlsfWApXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvclJlcykgPT4ge1xyXG4gICAgICAgICAgdGhyb3cgZXJyb3JSZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIHVzZXIgZGV0YWlscyBmb3IgdGhlIHNlbGVjdGVkIGdyb3VwXHJcbiAgICogQHBhcmFtIHtHZXRVc2VyRGV0YWlsc1BheWxvYWR9IHBheWxvYWRcclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPEFkZE9yRWRpdEdyb3VwVXNlckRldGFpbHNSZXNwb25zZT59XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBnZXRHcm91cFVzZXJEZXRhaWxzKFxyXG4gICAgcGF5bG9hZDogR2V0VXNlckRldGFpbHNQYXlsb2FkXHJcbiAgKTogT2JzZXJ2YWJsZTxBZGRPckVkaXRHcm91cFVzZXJEZXRhaWxzUmVzcG9uc2U+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlXHJcbiAgICAgIC5wb3N0RGF0YShgJHt0aGlzLmFwaUJhc2VVcmx9L2dyb3Vwcy9yb3N0ZXIvdXNlckRldGFpbHNgLCBwYXlsb2FkKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcclxuICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFBvc3RzIGFkZCBuZXcgdXNlciBmb3JtIGRhdGEgdG8gdGhlIEFQSSBmb3IgdGhlIHNlbGVjdGVkIGdyb3VwIGFuZCByZXR1cm5zIHRoZSBzdWNjZXNzIG9yIGZhaWx1cmUgcmVzcG9uc2UuXHJcbiAgICogQHBhcmFtIHsoQWRkT3JFZGl0VXNlclBheWxvYWRcclxuICAgKiAgICAgICB8IEFkZE9yRWRpdFVzZXJJbmRpdmlkdWFsUm9zdGVyUGF5bG9hZCl9IEFkZE9yRWRpdFVzZXJQYXlsb2FkXHJcbiAgICogQHBhcmFtIHtHcm91cFJvc3RlclR5cGV9IGdyb3VwUm9zdGVyVHlwZVxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8QWRkT3JFZGl0R3JvdXBVc2VyRGV0YWlsc1Jlc3BvbnNlPn1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIGFkZE5ld0dyb3VwVXNlcihcclxuICAgIEFkZE9yRWRpdFVzZXJQYXlsb2FkOlxyXG4gICAgICB8IEFkZE9yRWRpdFVzZXJQYXlsb2FkXHJcbiAgICAgIHwgQWRkT3JFZGl0VXNlckluZGl2aWR1YWxSb3N0ZXJQYXlsb2FkXHJcbiAgKTogT2JzZXJ2YWJsZTxBZGRPckVkaXRHcm91cFVzZXJEZXRhaWxzUmVzcG9uc2U+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlXHJcbiAgICAgIC5wb3N0RGF0YShcclxuICAgICAgICBgJHt0aGlzLmFwaUJhc2VVcmx9L2dyb3Vwcy9yb3N0ZXIvY3JlYXRlR3JvdXBVc2VyUm9sZWAsXHJcbiAgICAgICAgQWRkT3JFZGl0VXNlclBheWxvYWRcclxuICAgICAgKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcclxuICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBsb2FkZWQgZ3JvdXAgdHlwZSB1c2VyIHJvbGVzXHJcbiAgICogQHBhcmFtIHtDaGVja2JveE9wdGlvbltdfSB1c2VyUm9sZXNcclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIHNldEdyb3VwVHlwZVVzZXJSb2xlcyh1c2VyUm9sZXM6IENoZWNrYm94T3B0aW9uW10pOiB2b2lkIHtcclxuICAgIHRoaXMuZ3JvdXBUeXBlUm9sZXMgPSB1c2VyUm9sZXM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBncm91cCB0eXBlIHVzZXIgcm9sZXMuXHJcbiAgICogQHJldHVybiB7Q2hlY2tib3hPcHRpb25bXX1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIGdldEdyb3VwVHlwZVVzZXJSb2xlcygpOiBDaGVja2JveE9wdGlvbltdIHtcclxuICAgIHRoaXMuZ3JvdXBUeXBlUm9sZXM/Lm1hcCgob3B0aW9uKSA9PiAob3B0aW9uLmNoZWNrZWQgPSBmYWxzZSkpO1xyXG4gICAgcmV0dXJuIHRoaXMuZ3JvdXBUeXBlUm9sZXM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBzZWxlY3RlZCB1c2VyIGluZm8uXHJcbiAgICogQHBhcmFtIHtHcm91cFVzZXJJbmZvfSB1c2VySW5mb1xyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgc2V0U2VsZWN0ZWRVc2VySW5mbyh1c2VySW5mbzogR3JvdXBVc2VySW5mbyk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWxlY3RlZFVzZXJJbmZvID0gdXNlckluZm87XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHNlbGVjdGVkIHVzZXIgaW5mby5cclxuICAgKiBAcmV0dXJuIHtHcm91cFVzZXJJbmZvfVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ2V0U2VsZWN0ZWRVc2VySW5mbygpOiBHcm91cFVzZXJJbmZvIHtcclxuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkVXNlckluZm87XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGVzIGdyb3VwIHVzZXIgcm9sZXMgYW5kIG90aGVyIGRldGFpbHMgdG8gc2VydmVyIHVzaW5nIEh0dHBTZXJ2aWNlLlxyXG4gICAqIEBwYXJhbSB7KEFkZE9yRWRpdFVzZXJQYXlsb2FkIHwgQWRkT3JFZGl0VXNlckluZGl2aWR1YWxSb3N0ZXJQYXlsb2FkKX0gcGF5bG9hZFxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8QWRkT3JFZGl0R3JvdXBVc2VyRGV0YWlsc1Jlc3BvbnNlPn1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIGVkaXRHcm91cHNVc2VyUm9sZShcclxuICAgIHBheWxvYWQ6IEFkZE9yRWRpdFVzZXJQYXlsb2FkIHwgQWRkT3JFZGl0VXNlckluZGl2aWR1YWxSb3N0ZXJQYXlsb2FkXHJcbiAgKTogT2JzZXJ2YWJsZTxBZGRPckVkaXRHcm91cFVzZXJEZXRhaWxzUmVzcG9uc2U+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlXHJcbiAgICAgIC5wdXREYXRhKGAke3RoaXMuYXBpQmFzZVVybH0vZ3JvdXBzL3Jvc3Rlci9lZGl0R3JvdXBVc2VyUm9sZWAsIHBheWxvYWQpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgcm9zdGVyIGZ1bmN0aW9uIHR5cGUuXHJcbiAgICogQHBhcmFtIHtSb3N0ZXJGdW5jdGlvblR5cGV9IHJvc3RlckZ1bmN0aW9uVHlwZVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgc2V0Um9zdGVyRnVuY3Rpb25UeXBlKHJvc3RlckZ1bmN0aW9uVHlwZTogUm9zdGVyRnVuY3Rpb25UeXBlKTogdm9pZCB7XHJcbiAgICB0aGlzLnJvc3RlckZ1bmN0aW9uVHlwZSA9IHJvc3RlckZ1bmN0aW9uVHlwZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgcm9zdGVyIGZ1bmN0aW9uIHR5cGUuXHJcbiAgICogQHJldHVybiB7Um9zdGVyRnVuY3Rpb25UeXBlfVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ2V0Um9zdGVyRnVuY3Rpb25UeXBlKCk6IFJvc3RlckZ1bmN0aW9uVHlwZSB7XHJcbiAgICByZXR1cm4gdGhpcy5yb3N0ZXJGdW5jdGlvblR5cGU7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIGdyb3VwcyBiYXNlZCBvbiB0aGUgc2VhcmNoIGJ5IGdyb3VwIG5hbWUgb3IgYWNyb255bS5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2VhcmNoVGVybVxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8R2V0R3JvdXBVc2Vyc1Jlc3BvbnNlPn1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIGdyb3Vwc0J5TmFtZUFjcm9ueW0oc2VhcmNoVGVybTogc3RyaW5nKTogT2JzZXJ2YWJsZTxHZXRHcm91cFJlc3BvbnNlPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAuZ2V0RGF0YShcclxuICAgICAgICBgJHt0aGlzLmFwaUJhc2VVcmx9L2dyb3Vwcy9ncm91cHNCeU5hbWVBY3JvbnltP25hbWU9JHtzZWFyY2hUZXJtfWBcclxuICAgICAgKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3JSZXMpID0+IHtcclxuICAgICAgICAgIHRocm93IGVycm9yUmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIHVzZXIgZ3JvdXAgcGVybWlzc2lvbnNcclxuICAgKiBAcGFyYW0ge0dyb3VwUGVybWlzc2lvbltdfSB1c2VyR3JvdXBQZXJtaXNzaW9uc1xyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgc2V0VXNlckdyb3VwUGVybWlzc2lvbnModXNlckdyb3VwUGVybWlzc2lvbnM6IEdyb3VwUGVybWlzc2lvbltdKSB7XHJcbiAgICB0aGlzLnVzZXJHcm91cFBlcm1pc3Npb25zID0gdXNlckdyb3VwUGVybWlzc2lvbnM7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIHVzZXIgZ3JvdXAgcGVybWlzc2lvbnNcclxuICAgKiBAcmV0dXJuIHtHcm91cFBlcm1pc3Npb25bXX1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIGdldFVzZXJHcm91cFBlcm1pc3Npb25zKCk6IEdyb3VwUGVybWlzc2lvbltdIHtcclxuICAgIHJldHVybiB0aGlzLnVzZXJHcm91cFBlcm1pc3Npb25zO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBsb2dnZWQgSW4gdXNlciBpbmZvcm1hdGlvbi5cclxuICAgKiBAcGFyYW0ge0xvZ2dlZEluVXNlckluZm99IHVzZXJJbmZvXHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBzZXRVc2VySW5mbyh1c2VySW5mbzogTG9nZ2VkSW5Vc2VySW5mbyk6IHZvaWQge1xyXG4gICAgdGhpcy51c2VySW5mbyA9IHVzZXJJbmZvO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBsb2dnZWQgaW4gdXNlciBpbmZvcm1hdGlvbi5cclxuICAgKiBAcmV0dXJuIHtMb2dnZWRJblVzZXJJbmZvfVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ2V0VXNlckluZm8oKTogTG9nZ2VkSW5Vc2VySW5mbyB7XHJcbiAgICByZXR1cm4gdGhpcy51c2VySW5mbztcclxuICB9XHJcbiAgLyoqXHJcbiAgICogVmFsaWRhdGVzIHBlcm1pc3Npb24gYmFzZWQgYWNjZXNzIGZvciBwcm92aWRlZCBmZWF0dXJlLlxyXG4gICAqIENoZWNrcyBmb3IgZ3JvdXAgbGV2ZWwgcGVybWlzc2lvbnMsIGFuZCBwcm92aWRlcyBhY2Nlc3MgYmFzZWQgb24gaW5kaXZpZHVhbCBncm91cCBwZXJtaXNzaW9ucy5cclxuICAgKiBGb3IgZ2xvYmFsIHBlcm1pc3Npb25zIHByb3ZpZGVzIGFjY2VzcyBhY3Jvc3MgdGhlIGluZGl2aWR1YWwgZ3JvdXBzIG9yIFN5c3RlbSBncm91cHMuXHJcbiAgICogQHBhcmFtIHtQZXJtaXNzaW9uVHlwZX0gcGVybWlzc2lvblR5cGVcclxuICAgKiBAcmV0dXJuIHtib29sZWFufVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgdmFsaWRhdGVBY2Nlc3MoXHJcbiAgICBwZXJtaXNzaW9uVHlwZTogUGVybWlzc2lvblR5cGUsXHJcbiAgICBwZXJtaXNzaW9ucz86IFVzZXJQZXJtaXNzaW9uW10gfCBudWxsXHJcbiAgKTogYm9vbGVhbiB7XHJcbiAgICBpZiAocGVybWlzc2lvbnMpIHtcclxuICAgICAgY29uc3QgdXNlclBlcm1pc3Npb25zVG9Hcm91cCA9XHJcbiAgICAgICAgdGhpcy51c2VyUGVybWlzc2lvbnNTZXJ2aWNlLmZpbHRlclVzZXJHcm91cFBlcm1pc3Npb25zKFxyXG4gICAgICAgICAgcGVybWlzc2lvbnMsXHJcbiAgICAgICAgICB0aGlzLmdyb3VwUGVybWlzc2lvbnNTZXJ2aWNlLmdldEdyb3VwUGVybWlzc2lvbnMoKVxyXG4gICAgICAgICk7XHJcbiAgICAgIHJldHVybiB0aGlzLnVzZXJQZXJtaXNzaW9uc1NlcnZpY2UudmFsaWRhdGVBY2Nlc3NQZXJtaXNzaW9uKFxyXG4gICAgICAgIHBlcm1pc3Npb25UeXBlLFxyXG4gICAgICAgIHVzZXJQZXJtaXNzaW9uc1RvR3JvdXBcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLnVzZXJQZXJtaXNzaW9uc1NlcnZpY2UudmFsaWRhdGVBY2Nlc3NQZXJtaXNzaW9uKFxyXG4gICAgICBwZXJtaXNzaW9uVHlwZSxcclxuICAgICAgdGhpcy5nZXRVc2VyR3JvdXBQZXJtaXNzaW9ucygpXHJcbiAgICApO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBTdG9yZSB0aGUgbG9hZGVkIGdyb3VwIHR5cGVzLlxyXG4gICAqIEBwYXJhbSB7R3JvdXBUeXBlQ29uZmlndXJhdGlvbltdfSBncm91cFR5cGVzXHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBzZXRMb2FkZWRHcm91cFR5cGVzKGdyb3VwVHlwZXM6IEdyb3VwVHlwZUNvbmZpZ3VyYXRpb25bXSkge1xyXG4gICAgdGhpcy5ncm91cFR5cGVzID0gZ3JvdXBUeXBlcztcclxuICB9XHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIHRoZSBsb2FkZWQgZ3JvdXAgdHlwZXMuXHJcbiAgICogQHJldHVybiB7R3JvdXBUeXBlQ29uZmlndXJhdGlvbltdfVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ2V0TG9hZGVkR3JvdXBUeXBlcygpOiBHcm91cFR5cGVDb25maWd1cmF0aW9uW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuZ3JvdXBUeXBlcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtPcmdhbml6YXRpb25SZXF1ZXN0UGF5bG9hZH0gb3JnUmVxdWVzdFBheWxvYWRcclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPE9yZ2FuaXphdGlvblJlc3BvbnNlPn1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIGdldE9yZ2FuaXphdGlvbnMoXHJcbiAgICBvcmdSZXF1ZXN0UGF5bG9hZDogT3JnYW5pemF0aW9uUmVxdWVzdFBheWxvYWRcclxuICApOiBPYnNlcnZhYmxlPE9yZ2FuaXphdGlvblJlc3BvbnNlPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAucG9zdERhdGEoXHJcbiAgICAgICAgYCR7dGhpcy5hcGlCYXNlVXJsfS9ncm91cHMvcm9zdGVyL29yZ2FuaXphdGlvbnNgLFxyXG4gICAgICAgIG9yZ1JlcXVlc3RQYXlsb2FkXHJcbiAgICAgIClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yUmVzKSA9PiB7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvclJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBncm91cCB0eXBlIGNvbmZpZ3VyYXRpb24gQnVzaW5lc3MgcnVsZSBmb3IgdGhlIHNlbGVjdGVkIGdyb3VwLlxyXG4gICAqIEByZXR1cm4geyhCdXNpbmVzc1J1bGUgIHwgdW5kZWZpbmVkKX1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIGdldEJ1c2luZXNzUnVsZU9mU2VsZWN0ZWRHcm91cCgpOiBCdXNpbmVzc1J1bGUgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9hZGVkR3JvdXBUeXBlcygpPy5maW5kKFxyXG4gICAgICAoZ3JvdXApID0+IGdyb3VwPy5jb25maWdGaWVsZElkID09PSB0aGlzLmdldFNlbGVjdGVkR3JvdXBJbmZvKCk/Lmdyb3VwVHlwZVxyXG4gICAgKT8uY29uZmlnRmllbGRWYWx1ZT8uYnVzaW5lc3NSdWxlO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBmb3JtIHN1Ym1pdCBidXR0b24gYmFzZWQgb24gcGFzc2VkIHBhcmFtZXRlcnMuXHJcbiAgICogQHBhcmFtIHtHcm91cFJvc3RlclR5cGV9IGdyb3VwUm9zdGVyVHlwZVxyXG4gICAqIEBwYXJhbSB7Rm9ybUNvbnRyb2xTdGF0dXN9IGZvcm1TdGF0dXNcclxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBzZWxlY3RlZFVzZXJSb2xlc1xyXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBpc1N1Ym1pdEJ1dHRvbkRpc2FibGVkKFxyXG4gICAgZ3JvdXBSb3N0ZXJUeXBlOiBHcm91cFJvc3RlclR5cGUsXHJcbiAgICBmb3JtU3RhdHVzOiBGb3JtQ29udHJvbFN0YXR1cyxcclxuICAgIHNlbGVjdGVkVXNlclJvbGVzOiBzdHJpbmdbXVxyXG4gICk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKGdyb3VwUm9zdGVyVHlwZSA9PT0gR3JvdXBSb3N0ZXJUeXBlLklORElWSURVQUwpXHJcbiAgICAgIHJldHVybiBmb3JtU3RhdHVzID09PSBGb3JtU3RhdHVzLklOVkFMSUQ7XHJcbiAgICByZXR1cm4gc2VsZWN0ZWRVc2VyUm9sZXM/Lmxlbmd0aCA9PT0gMCB8fCBmb3JtU3RhdHVzID09PSBGb3JtU3RhdHVzLklOVkFMSUQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzIGlzUGFyZW50R3JvdXBDaGFuZ2VkIHRydWUgb3IgZmFsc2UuXHJcbiAgICogQHBhcmFtIHtib29sZWFufSBpc1BhcmVudEdyb3VwQ2hhbmdlZFxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgc2V0UGFyZW50R3JvdXBDaGFuZ2VTdGF0dXMoaXNQYXJlbnRHcm91cENoYW5nZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuaXNQYXJlbnRHcm91cENoYW5nZWQgPSBpc1BhcmVudEdyb3VwQ2hhbmdlZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgaXNQYXJlbnRHcm91cENoYW5nZWQgdmFsdWUuXHJcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIGdldFBhcmVudEdyb3VwQ2hhbmdlU3RhdHVzKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaXNQYXJlbnRHcm91cENoYW5nZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBtZW1iZXIgdHlwZXMuXHJcbiAgICogQHBhcmFtIHtSb2xlW119IG1lbWJlclR5cGVzXHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBzZXRNZW1iZXJUeXBlcyhtZW1iZXJUeXBlczogUm9sZVtdKTogdm9pZCB7XHJcbiAgICB0aGlzLm1lbWJlclR5cGVzID0gbWVtYmVyVHlwZXM7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIG1lbWJlciB0eXBlcy5cclxuICAgKiBAcmV0dXJuIHtSb2xlW119XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBnZXRNZW1iZXJUeXBlcygpOiBSb2xlW10ge1xyXG4gICAgcmV0dXJuIHRoaXMubWVtYmVyVHlwZXM7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
636
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXBzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ncm91cHMvc3JjL2xpYi9zZXJ2aWNlcy9ncm91cHMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBYyxHQUFHLEVBQUUsVUFBVSxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQWFwRSxPQUFPLEtBQUssV0FBVyxNQUFNLDBCQUEwQixDQUFDO0FBYXhELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBa0J4RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBTXpELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUlqRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7Ozs7O0FBRXJEOzs7R0FHRztBQUlILE1BQU0sT0FBTyxhQUFhO0lBb0J4Qiw2REFBNkQ7SUFDN0Q7SUFDRSwwQ0FBMEM7SUFDbEMsV0FBd0I7SUFDaEMsMENBQTBDO0lBQ2xDLHNCQUE4QztJQUN0RCwwQ0FBMEM7SUFDbEMsdUJBQW1EO0lBQzNELDBDQUEwQztJQUNuQyxZQUEyQixDQUFDLDZDQUE2Qzs7UUFOeEUsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFFeEIsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUU5Qyw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQTRCO1FBRXBELGlCQUFZLEdBQVosWUFBWSxDQUFlO1FBNUJwQyxlQUFVLEdBQUcsV0FBVyxFQUFFLE1BQU0sQ0FBQztRQU9qQyxzQkFBaUIsR0FBRyxJQUFJLGVBQWUsQ0FDckMsaUJBQWlCLENBQUMsV0FBVyxDQUM5QixD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Q0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO0lBQ2pDLENBQUM7SUFDRDs7OztPQUlHO0lBQ0gsY0FBYztRQUNaLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMxQixDQUFDOytHQXJ3QlUsYUFBYTttSEFBYixhQUFhLGNBRlosTUFBTTs7NEZBRVAsYUFBYTtrQkFIekIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIG1hcCwgY2F0Y2hFcnJvciwgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7XHJcbiAgQ3JlYXRlR3JvdXBQYXlsb2FkLFxyXG4gIENyZWF0ZUdyb3VwUmVzcG9uc2UsXHJcbn0gZnJvbSAnLi4vbW9kZWxzL2NyZWF0ZS1ncm91cC5tb2RlbCc7XHJcbmltcG9ydCB7XHJcbiAgQnVzaW5lc3NSdWxlLFxyXG4gIEdyb3VwVHlwZUNvbmZpZ3VyYXRpb24sXHJcbiAgR3JvdXBUeXBlQ29uZmlnVmFsdWUsXHJcbiAgR3JvdXBUeXBlUmVzcG9uc2UsXHJcbn0gZnJvbSAnLi4vbW9kZWxzL2dyb3VwLXR5cGVzLm1vZGVsJztcclxuaW1wb3J0IHsgQWxlcnRzU2VydmljZSwgSHR0cFNlcnZpY2UgfSBmcm9tICdAaWVlZXNhLW5wbS91dGlsaXR5JztcclxuaW1wb3J0IHsgR2V0R3JvdXBSZXNwb25zZSwgR2V0R3JvdXBzUGF5bG9hZCB9IGZyb20gJy4uL21vZGVscy92aWV3LWdyb3VwLm1vZGVsJztcclxuaW1wb3J0ICogYXMgc2NyZWVuVGV4dHMgZnJvbSAnLi4vYXNzZXRzL2NvbnN0YW50cy5qc29uJztcclxuaW1wb3J0IHsgRGVsZXRlR3JvdXBQYXlsb2FkIH0gZnJvbSAnLi4vbW9kZWxzL2RlbGV0ZS1ncm91cC5tb2RlbCc7XHJcbmltcG9ydCB7IEdyb3VwSW5mbyB9IGZyb20gJy4uL21vZGVscy9ncm91cC1pbmZvLm1vZGVsJztcclxuaW1wb3J0IHtcclxuICBTZWFyY2hVc2Vyc1BheWxvYWQsXHJcbiAgRmlsdGVyVXNlcnNQYXlsb2FkLFxyXG4gIEdldEdyb3VwVXNlcnNSZXNwb25zZSxcclxuICBVc2VyLFxyXG4gIExvZ2dlZEluVXNlckluZm8sXHJcbn0gZnJvbSAnLi4vbW9kZWxzL3VzZXIubW9kZWwnO1xyXG5pbXBvcnQgeyBSb2xlIH0gZnJvbSAnLi4vbW9kZWxzL3JvbGUubW9kZWwnO1xyXG5pbXBvcnQgeyBDaGVja2JveE9wdGlvbiB9IGZyb20gJ0BpZWVlc2EtbnBtL3ByZXNlbnRhdGlvbic7XHJcbmltcG9ydCB7IEVkaXRHcm91cFBheWxvYWQgfSBmcm9tICcuLi9tb2RlbHMvZWRpdC1ncm91cC5tb2RlbCc7XHJcbmltcG9ydCB7IEdyb3VwRnVuY3Rpb25UeXBlIH0gZnJvbSAnLi4vbW9kZWxzL2dyb3VwLWZ1bmN0aW9uLXR5cGUubW9kZWwnO1xyXG5pbXBvcnQgeyBSb3N0ZXJGdW5jdGlvblR5cGUgfSBmcm9tICcuLi9tb2RlbHMvcm9zdGVyLWZ1bmN0aW9uLXR5cGUubW9kZWwnO1xyXG5pbXBvcnQgeyBHcm91cFVzZXJJbmZvIH0gZnJvbSAnLi4vbW9kZWxzL2dyb3VwLXVzZXItaW5mby5tb2RlbCc7XHJcbmltcG9ydCB7XHJcbiAgQWRkT3JFZGl0VXNlclBheWxvYWQsXHJcbiAgQWRkT3JFZGl0R3JvdXBVc2VyRGV0YWlsc1Jlc3BvbnNlLFxyXG4gIEFkZE9yRWRpdFVzZXJJbmRpdmlkdWFsUm9zdGVyUGF5bG9hZCxcclxufSBmcm9tICcuLi9tb2RlbHMvYWRkLW9yLWVkaXQtdXNlci1ncm91cC5tb2RlbCc7XHJcbmltcG9ydCB7IERlbGV0ZVVzZXJHcm91cFBheWxvYWQgfSBmcm9tICcuLi9tb2RlbHMvZGVsZXRlLXVzZXItZ3JvdXAubW9kZWwnO1xyXG5pbXBvcnQge1xyXG4gIEdldFVzZXJEZXRhaWxzUGF5bG9hZCxcclxuICBTZWFyY2hVc2VyQnlFbWFpbFJlc3BvbnNlLFxyXG59IGZyb20gJy4uL21vZGVscy9hZGQtbmV3LXVzZXIubW9kZWwnO1xyXG5pbXBvcnQge1xyXG4gIE9yZ2FuaXphdGlvblJlcXVlc3RQYXlsb2FkLFxyXG4gIE9yZ2FuaXphdGlvblJlc3BvbnNlLFxyXG59IGZyb20gJy4uL21vZGVscy9vcmdhbml6YXRpb24ubW9kZWwnO1xyXG5pbXBvcnQgeyBDbGFzc2lmaWNhdGlvblJlc3BvbnNlIH0gZnJvbSAnLi4vbW9kZWxzL2NsYXNzaWZpY2F0aW9uLm1vZGVsJztcclxuaW1wb3J0IHsgR3JvdXBSb3N0ZXJUeXBlIH0gZnJvbSAnLi4vbW9kZWxzL3Jvc3Rlci10eXBlLm1vZGVsJztcclxuaW1wb3J0IHsgRm9ybVN0YXR1cyB9IGZyb20gJy4uL21vZGVscy9mb3JtLXN0YXR1cy5tb2RlbCc7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sU3RhdHVzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQge1xyXG4gIEdyb3VwUGVybWlzc2lvbixcclxuICBVc2VyUGVybWlzc2lvbixcclxufSBmcm9tICcuLi9tb2RlbHMvZ3JvdXAtcGVybWlzc2lvbnMubW9kZWwnO1xyXG5pbXBvcnQgeyBQZXJtaXNzaW9uVHlwZSB9IGZyb20gJy4uL21vZGVscy9wZXJtaXNzaW9uLXR5cGUubW9kZWwnO1xyXG5pbXBvcnQgeyBVc2VyUGVybWlzc2lvbnNTZXJ2aWNlIH0gZnJvbSAnLi91c2VyLXBlcm1pc3Npb25zLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBHcm91cFBlcm1pc3Npb25zTWFwU2VydmljZSB9IGZyb20gJy4vZ3JvdXAtcGVybWlzc2lvbnMtbWFwLXNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQYXJlbnRHcm91cHNJbmZvIH0gZnJvbSAnLi4vbW9kZWxzL3BhcmVudC1ncm91cHMtaW5mby5tb2RlbCc7XHJcbmltcG9ydCB7IFJvbGVUeXBlIH0gZnJvbSAnLi4vbW9kZWxzL3JvbGUtdHlwZS5tb2RlbCc7XHJcblxyXG4vKipcclxuICogR3JvdXBzIHNlcnZpY2UgaXMgYW4gYWJzdHJhY3QgbGF5ZXIgYW5kIHJlc3BvbnNpYmxlIGZvciBtYW5hZ2luZyBncm91cHMgUkVTVCBBUEkgY2FsbHMuXHJcbiAqIEBjbGFzcyBHcm91cHNTZXJ2aWNlXHJcbiAqL1xyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgR3JvdXBzU2VydmljZSB7XHJcbiAgZ3JvdXBzVGV4dCA9IHNjcmVlblRleHRzPy5lcnJvcnM7XHJcbiAgYXBpQmFzZVVybCE6IHN0cmluZztcclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gIHVzZXJQZXJtaXNzaW9uOiBhbnk7XHJcbiAgc2VsZWN0ZWRHcm91cEluZm8hOiBHcm91cEluZm8gfCB1bmRlZmluZWQ7XHJcbiAgZ3JvdXBGdW5jdGlvblR5cGUhOiBHcm91cEZ1bmN0aW9uVHlwZTtcclxuICBzZWxlY3RlZEdyb3VwUGFyZW50SW5mbyE6IEdyb3VwSW5mbyB8IHVuZGVmaW5lZDtcclxuICBvcGVuTW9kYWxOb3RpZmllciA9IG5ldyBCZWhhdmlvclN1YmplY3Q8R3JvdXBGdW5jdGlvblR5cGU+KFxyXG4gICAgR3JvdXBGdW5jdGlvblR5cGUuVklFV19ST1NURVJcclxuICApO1xyXG4gIGdyb3VwVHlwZVJvbGVzITogQ2hlY2tib3hPcHRpb25bXTtcclxuICBzZWxlY3RlZFVzZXJJbmZvITogR3JvdXBVc2VySW5mbztcclxuICBjYW5TaG93TWVzc2FnZSA9IGZhbHNlO1xyXG4gIHJvc3RlckZ1bmN0aW9uVHlwZSE6IFJvc3RlckZ1bmN0aW9uVHlwZTtcclxuICB1c2VyR3JvdXBQZXJtaXNzaW9ucyE6IEdyb3VwUGVybWlzc2lvbltdO1xyXG4gIGdyb3VwVHlwZXMhOiBHcm91cFR5cGVDb25maWd1cmF0aW9uW107XHJcbiAgaXNQYXJlbnRHcm91cENoYW5nZWQgPSBmYWxzZTtcclxuICB1c2VySW5mbyE6IExvZ2dlZEluVXNlckluZm87XHJcbiAgbWVtYmVyVHlwZXMhOiBSb2xlW107XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5LWZ1bmN0aW9uLCBuby11bnVzZWQtdmFyc1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwcml2YXRlIGh0dHBTZXJ2aWNlOiBIdHRwU2VydmljZSxcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHJpdmF0ZSB1c2VyUGVybWlzc2lvbnNTZXJ2aWNlOiBVc2VyUGVybWlzc2lvbnNTZXJ2aWNlLFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwcml2YXRlIGdyb3VwUGVybWlzc2lvbnNTZXJ2aWNlOiBHcm91cFBlcm1pc3Npb25zTWFwU2VydmljZSxcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHVibGljIGFsZXJ0U2VydmljZTogQWxlcnRzU2VydmljZSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZW1wdHktZnVuY3Rpb25cclxuICApIHt9XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBzZXRBcHBDb25maWcoYXBpQmFzZVVybDogc3RyaW5nLCB1c2VyUGVybWlzc2lvbjogYW55KSB7XHJcbiAgICB0aGlzLmFwaUJhc2VVcmwgPSBhcGlCYXNlVXJsO1xyXG4gICAgdGhpcy51c2VyUGVybWlzc2lvbiA9IHVzZXJQZXJtaXNzaW9uO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBHZXRzIGFwcGxpY2F0aW9uIGdyb3VwIHR5cGVzIGZyb20gQVBJIGFuZCByZXR1cm5zIGl0IGFzIGFuIG9ic2VydmFibGUuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxHcm91cFR5cGVSZXNwb25zZT59IC1JdCByZXR1cm5zIGdyb3VwIHR5cGVzIGlmIHN1Y2Nlc3MgZWxzZSBlcnJvci5cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgZ2V0R3JvdXBUeXBlcygpOiBPYnNlcnZhYmxlPEdyb3VwVHlwZVJlc3BvbnNlPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAuZ2V0RGF0YShgJHt0aGlzLmFwaUJhc2VVcmx9L2dyb3Vwcy9jb25maWcvZ3JvdXBUeXBlQ29uZmlnSW5mb2ApXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHRoaXMuc2V0TG9hZGVkR3JvdXBUeXBlcyhyZXNwb25zZT8uYm9keSk7XHJcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcclxuICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgYWxsb3dlZCBwYXJlbnQgZ3JvdXBzIGZyb20gQVBJIGFuZCByZXR1cm5zIGl0IGFzIGFuIG9ic2VydmFibGUuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGdyb3VwSWRcclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPEdyb3VwVHlwZVJlc3BvbnNlPn1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIGdldEFsbG93ZWRQYXJlbnRHcm91cHMoZ3JvdXBJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxQYXJlbnRHcm91cHNJbmZvW10+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlXHJcbiAgICAgIC5nZXREYXRhKGAke3RoaXMuYXBpQmFzZVVybH0vZ3JvdXBzL2FsbG93ZWRQYXJlbnRHcm91cHMvJHtncm91cElkfWApXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHJldHVybiByZXNwb25zZT8uYm9keTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgYWxsIHRoZSBncm91cHMgYmFzZWQgb24gcGFzc2VkIGdyb3VwIElkIGFuZCBncm91cCB0eXBlLlxyXG4gICAqIEBwYXJhbSB7R2V0R3JvdXBzUGF5bG9hZH0gZ2V0R3JvdXBzUGF5bG9hZFxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8R2V0R3JvdXBSZXNwb25zZT59XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBnZXRHcm91cHMoZ2V0R3JvdXBzUGF5bG9hZDogR2V0R3JvdXBzUGF5bG9hZCk6IE9ic2VydmFibGU8R2V0R3JvdXBSZXNwb25zZT4ge1xyXG4gICAgbGV0IHVybCA9ICdyb290R3JvdXBzJztcclxuICAgIGlmIChnZXRHcm91cHNQYXlsb2FkLmdyb3VwSWQpXHJcbiAgICAgIHVybCA9ICdpbW1DaGlsZEdyb3Vwc0J5R3JvdXBJZC8nICsgZ2V0R3JvdXBzUGF5bG9hZC5ncm91cElkO1xyXG4gICAgZWxzZSBpZiAoZ2V0R3JvdXBzUGF5bG9hZC5ncm91cFR5cGVJZClcclxuICAgICAgdXJsID0gJ2dyb3Vwc0J5R3JvdXBUeXBlLycgKyBnZXRHcm91cHNQYXlsb2FkLmdyb3VwVHlwZUlkO1xyXG5cclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLmdldERhdGEoYCR7dGhpcy5hcGlCYXNlVXJsfS9ncm91cHMvJHt1cmx9YCkucGlwZShcclxuICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgfSksXHJcbiAgICAgIGNhdGNoRXJyb3IoKGVycm9yUmVzKSA9PiB7XHJcbiAgICAgICAgdGhyb3cgZXJyb3JSZXM7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBEZWxldGVzIGEgZ3JvdXAgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGluZm9ybWF0aW9uXHJcbiAgICogQHBhcmFtIHtncm91cElkfSBzdHJpbmcgLWdyb3VwSWQgb2YgdGhlIGdyb3VwIHdoaWNoIGlzIHRvIGJlIGRlbGV0ZWRcclxuICAgKiBAcmV0dXJuIHsqfSAge09ic2VydmFibGU8YW55Pn0gLU9ic2VydmFibGUgcmVwcmVzZW50aW5nIHRoZSBncm91cCBkZWxldGlvbiByZXNwb25zZVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBkZWxldGVHcm91cChkZWxldGVHcm91cFBheWxvYWQ6IERlbGV0ZUdyb3VwUGF5bG9hZCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAucHV0RGF0YShgJHt0aGlzLmFwaUJhc2VVcmx9L2dyb3Vwcy9kZWxldGVgLCBkZWxldGVHcm91cFBheWxvYWQpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogRGVsZXRlcyBhIHVzZXIgZnJvbSBncm91cCBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgaW5mb3JtYXRpb25cclxuICAgKiBAcGFyYW0ge2dyb3VwSWR9IHN0cmluZyAtZ3JvdXBJZCBvZiB0aGUgc2VsZWN0ZWQgZ3JvdXAgZnJvbSB3aGVyZSBzZWxlY3RlZCB1c2VyIHRvIGJlIGRlbGV0ZWQuXHJcbiAgICogQHBhcmFtIHt1c2VySWR9IEFycmF5IC11c2VyIGlkcyBvZiBzZWxlY3RlZCB1c2VycyB3aG8gYXJlIGRlbGV0ZWQgZnJvbSB0aGUgc2VsZWN0ZWQgZ3JvdXBcclxuICAgKiBAcmV0dXJuIHsqfSAge09ic2VydmFibGU8YW55Pn0gLU9ic2VydmFibGUgcmVwcmVzZW50aW5nIHRoZSBncm91cCBkZWxldGlvbiByZXNwb25zZVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBkZWxldGVVc2Vyc0dyb3VwKFxyXG4gICAgZGVsZXRlVXNlckdyb3VwUGF5bG9hZDogRGVsZXRlVXNlckdyb3VwUGF5bG9hZFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICApOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2VcclxuICAgICAgLnB1dERhdGEoXHJcbiAgICAgICAgYCR7dGhpcy5hcGlCYXNlVXJsfS9ncm91cHMvcm9zdGVyL2RlbGV0ZUdyb3VwVXNlcnNgLFxyXG4gICAgICAgIGRlbGV0ZVVzZXJHcm91cFBheWxvYWRcclxuICAgICAgKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcclxuICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQb3N0cyBjcmVhdGUgZ3JvdXAgZm9ybSBkYXRhIHRvIHNlcnZlciB1c2luZyBIdHRwU2VydmljZSBmb3IgY3JlYXRpbmcgbmV3IGdyb3VwLlxyXG4gICAqIEBwYXJhbSB7Q3JlYXRlR3JvdXBQYXlsb2FkfSBjcmVhdGVHcm91cFBheWxvYWQgLWNyZWF0ZSBncm91cCBmb3JtIGRhdGEgd2hpY2ggaW5jbHVkZXMgZ3JvdXAgbmFtZSwgdHlwZSwgc2hvcnQgbmFtZSwgc2NvcGUuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxDcmVhdGVHcm91cFJlc3BvbnNlPn0gLXJldHVybnMgY3JlYXRlIGdyb3VwIEFQSSByZXNwb25zZSAoc3VjY2VzcyBvciBlcnJvcikgYXMgYW4gb2JzZXJ2YWJsZS5cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgY3JlYXRlR3JvdXAoXHJcbiAgICBjcmVhdGVHcm91cFBheWxvYWQ6IENyZWF0ZUdyb3VwUGF5bG9hZFxyXG4gICk6IE9ic2VydmFibGU8Q3JlYXRlR3JvdXBSZXNwb25zZT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2VcclxuICAgICAgLnBvc3REYXRhKGAke3RoaXMuYXBpQmFzZVVybH0vZ3JvdXBzL2NyZWF0ZWAsIGNyZWF0ZUdyb3VwUGF5bG9hZClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlcyBncm91cCBmb3JtIGRhdGEgdG8gc2VydmVyIHVzaW5nIEh0dHBTZXJ2aWNlLlxyXG4gICAqIEBwYXJhbSB7RWRpdEdyb3VwUGF5bG9hZH0gZWRpdEdyb3VwUGF5bG9hZCAtZWRpdCBncm91cCBmb3JtIGRhdGEgd2hpY2ggaW5jbHVkZXMgZ3JvdXAgbmFtZSwgc2hvcnQgbmFtZSwgc2NvcGUuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxFZGl0R3JvdXBQYXlsb2FkPn0gLXJldHVybnMgZWRpdCBncm91cCBBUEkgcmVzcG9uc2UgKHN1Y2Nlc3Mgb3IgZXJyb3IpIGFzIGFuIG9ic2VydmFibGUuXHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBlZGl0R3JvdXAoXHJcbiAgICBlZGl0R3JvdXBQYXlsb2FkOiBFZGl0R3JvdXBQYXlsb2FkXHJcbiAgKTogT2JzZXJ2YWJsZTxDcmVhdGVHcm91cFJlc3BvbnNlPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAucHV0RGF0YShgJHt0aGlzLmFwaUJhc2VVcmx9L2dyb3Vwcy9lZGl0YCwgZWRpdEdyb3VwUGF5bG9hZClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVGhpcyBtZXRob2Qgd2lsbCBwYXJzZSB0aGUgZXJyb3IgY29kZXMgYW5kIHJldHVybiB0aGUgcmVzcGVjdGl2ZSBlcnJvciBtZXNzYWdlIGZvciBlYWNoIGNvZGUuXHJcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gZXJyb3JDb2Rlc1xyXG4gICAqIEByZXR1cm4ge3N0cmluZ1tdfSBlcnJvck1lc3NhZ2VcclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIHBhcnNlRXJyb3JNZXNzYWdlKGVycm9yQ29kZXM6IHN0cmluZ1tdKSB7XHJcbiAgICBjb25zdCBlcnJvck1lc3NhZ2U6IHN0cmluZ1tdID0gW107XHJcbiAgICBlcnJvckNvZGVzPy5mb3JFYWNoKChpdGVtOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlS2V5ID0gZXJyb3JDb2Rlc1tpbmRleF0gYXMga2V5b2YgdHlwZW9mIHRoaXMuZ3JvdXBzVGV4dDtcclxuICAgICAgZXJyb3JNZXNzYWdlLnB1c2godGhpcy5ncm91cHNUZXh0W2Vycm9yTWVzc2FnZUtleV0pO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyBzZWxlY3RlZCBncm91cCBpbmZvLlxyXG4gICAqIEBwYXJhbSB7KEdyb3VwSW5mbyB8IHVuZGVmaW5lZCl9IHNlbGVjdGVkR3JvdXBJbmZvIC1zZWxlY3RlZCBncm91cCBpbmZvLlxyXG4gICAqIEBwYXJhbSB7KEdyb3VwSW5mbyB8IHVuZGVmaW5lZCl9IFtzZWxlY3RlZEdyb3VwUGFyZW50SW5mb10gLXNlbGVjdGVkIHBhcmVudCBncm91cCBpbmZvLlxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgc2V0U2VsZWN0ZWRHcm91cEluZm8oXHJcbiAgICBzZWxlY3RlZEdyb3VwSW5mbzogR3JvdXBJbmZvIHwgdW5kZWZpbmVkLFxyXG4gICAgc2VsZWN0ZWRHcm91cFBhcmVudEluZm8/OiBHcm91cEluZm8gfCB1bmRlZmluZWRcclxuICApIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRHcm91cEluZm8gPSBzZWxlY3RlZEdyb3VwSW5mbztcclxuICAgIHRoaXMuc2VsZWN0ZWRHcm91cFBhcmVudEluZm8gPSBzZWxlY3RlZEdyb3VwUGFyZW50SW5mbztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIHNlbGVjdGVkIGdyb3VwIGluZm8uXHJcbiAgICogQHJldHVybiB7KEdyb3VwSW5mbyB8IHVuZGVmaW5lZCl9IC1ncm91cCBpbmZvLlxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ2V0U2VsZWN0ZWRHcm91cEluZm8oKTogR3JvdXBJbmZvIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkR3JvdXBJbmZvO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgc2VsZWN0ZWQgZ3JvdXAgcGFyZW50IGdyb3VwIGluZm8uXHJcbiAgICogQHJldHVybiB7KEdyb3VwSW5mbyB8IHVuZGVmaW5lZCl9IC1ncm91cCBpbmZvLlxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ2V0U2VsZWN0ZWRHcm91cFBhcmVudEluZm8oKTogR3JvdXBJbmZvIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkR3JvdXBQYXJlbnRJbmZvO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyBncm91cCBmdW5jdGlvbiB0eXBlLlxyXG4gICAqIEBwYXJhbSB7R3JvdXBGdW5jdGlvblR5cGV9IGdyb3VwRnVuY3Rpb25UeXBlIC1ncm91cCBmdW5jdGlvbiB0eXBlLlxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgc2V0R3JvdXBGdW5jdGlvblR5cGUoZ3JvdXBGdW5jdGlvblR5cGU6IEdyb3VwRnVuY3Rpb25UeXBlKTogdm9pZCB7XHJcbiAgICB0aGlzLmdyb3VwRnVuY3Rpb25UeXBlID0gZ3JvdXBGdW5jdGlvblR5cGU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIGdyb3VwIGZ1bmN0aW9uIHR5cGUuXHJcbiAgICogQHJldHVybiB7R3JvdXBGdW5jdGlvblR5cGV9IC1ncm91cCBmdW5jdGlvbiB0eXBlLlxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ2V0R3JvdXBGdW5jdGlvblR5cGUoKTogR3JvdXBGdW5jdGlvblR5cGUge1xyXG4gICAgcmV0dXJuIHRoaXMuZ3JvdXBGdW5jdGlvblR5cGU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBncm91cCB1c2VycyBmb3IgdGhlIGdpdmVuIGdyb3VwIGlkLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBncm91cElkXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxHZXRHcm91cFVzZXJzUmVzcG9uc2U+fVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgZ2V0R3JvdXBVc2VycyhcclxuICAgIGdyb3VwSWQ6IHN0cmluZyxcclxuICAgIHNvcnRDb2x1bW46IHN0cmluZyxcclxuICAgIHNvcnREaXJlY3Rpb246IGJvb2xlYW5cclxuICApOiBPYnNlcnZhYmxlPEdldEdyb3VwVXNlcnNSZXNwb25zZT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2VcclxuICAgICAgLmdldERhdGEoXHJcbiAgICAgICAgYCR7dGhpcy5hcGlCYXNlVXJsfS9ncm91cHMvcm9zdGVyLyR7Z3JvdXBJZH0/c29ydENvbHVtbj0ke3NvcnRDb2x1bW59JmFzY2VuZGluZ09yZGVyPSR7c29ydERpcmVjdGlvbn1gXHJcbiAgICAgIClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yUmVzKSA9PiB7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvclJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgZ3JvdXAgdXNlcnMgYmFzZWQgb24gdGhlIGZpbHRlcmVkIHJvbGVzLlxyXG4gICAqIEBwYXJhbSB7RmlsdGVyVXNlcnNQYXlsb2FkfSBwYXlsb2FkXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxHZXRHcm91cFVzZXJzUmVzcG9uc2U+fVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ2V0R3JvdXBVc2Vyc0J5Um9sZXMoXHJcbiAgICBwYXlsb2FkOiBGaWx0ZXJVc2Vyc1BheWxvYWRcclxuICApOiBPYnNlcnZhYmxlPEdldEdyb3VwVXNlcnNSZXNwb25zZT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2VcclxuICAgICAgLnBvc3REYXRhKGAke3RoaXMuYXBpQmFzZVVybH0vZ3JvdXBzL3Jvc3Rlci9ncm91cFVzZXJzRmlsdGVyYCwgcGF5bG9hZClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yUmVzKSA9PiB7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvclJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgZ3JvdXAgdXNlcnMgYmFzZWQgb24gc2VhcmNoZWQgbmFtZSBvciBlbWFpbFxyXG4gICAqIEBwYXJhbSB7U2VhcmNoVXNlcnNQYXlsb2FkfSBwYXlsb2FkXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxHZXRHcm91cFVzZXJzUmVzcG9uc2U+fVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgc2VhcmNoR3JvdXBVc2VycyhcclxuICAgIHBheWxvYWQ6IFNlYXJjaFVzZXJzUGF5bG9hZFxyXG4gICk6IE9ic2VydmFibGU8R2V0R3JvdXBVc2Vyc1Jlc3BvbnNlPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAucG9zdERhdGEoYCR7dGhpcy5hcGlCYXNlVXJsfS9ncm91cHMvcm9zdGVyL2dyb3VwVXNlcnNTZWFyY2hgLCBwYXlsb2FkKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3JSZXMpID0+IHtcclxuICAgICAgICAgIHRocm93IGVycm9yUmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBncm91cCByb2xlcyBiYXNlZCBvbiB0aGUgZ3JvdXAgdHlwZS5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gZ3JvdXBUeXBlSWRcclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPENoZWNrYm94T3B0aW9uW10+fVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzLCBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcclxuICBnZXRHcm91cFR5cGVSb2xlcyhncm91cFR5cGVJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxDaGVja2JveE9wdGlvbltdPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAuZ2V0RGF0YShcclxuICAgICAgICBgJHt0aGlzLmFwaUJhc2VVcmx9L2dyb3Vwcy9jb25maWcvcm9sZXNCeUdyb3VwVHlwZS8ke2dyb3VwVHlwZUlkfWBcclxuICAgICAgKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCByb2xlc09wdGlvbjogQ2hlY2tib3hPcHRpb25bXSA9IFtdO1xyXG4gICAgICAgICAgY29uc3QgbWVtYmVyVHlwZXM6IFJvbGVbXSA9IFtdO1xyXG4gICAgICAgICAgcmVzcG9uc2U/LmJvZHk/LmZvckVhY2goKHJvbGU6IFJvbGUpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJvbGU/LnJvbGVUeXBlTmFtZSA9PT0gUm9sZVR5cGUuTUVNQkVSX0xFVkVMKSB7XHJcbiAgICAgICAgICAgICAgbWVtYmVyVHlwZXMucHVzaChyb2xlKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICByb2xlc09wdGlvbi5wdXNoKHtcclxuICAgICAgICAgICAgICAgIGlkOiByb2xlLnJvbGVJZCxcclxuICAgICAgICAgICAgICAgIG5hbWU6IHJvbGUucm9sZU5hbWUsXHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBjaGVja2VkOiBmYWxzZSxcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICB0aGlzLnNldEdyb3VwVHlwZVVzZXJSb2xlcyhyb2xlc09wdGlvbik7XHJcbiAgICAgICAgICB0aGlzLnNldE1lbWJlclR5cGVzKG1lbWJlclR5cGVzKTtcclxuICAgICAgICAgIHJldHVybiByb2xlc09wdGlvbjtcclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvclJlcykgPT4ge1xyXG4gICAgICAgICAgdGhyb3cgZXJyb3JSZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogRmV0Y2hlcyB0aGUgY2xhc3NpZmljYXRpb25zIG1hc3RlciBkYXRhIGZyb20gY29uZmlndXJhdGlvbiBhbmQgcmV0dXJucy5cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPENsYXNzaWZpY2F0aW9uUmVzcG9uc2U+fVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ2V0Q2xhc3NpZmljYXRpb25zKCk6IE9ic2VydmFibGU8Q2xhc3NpZmljYXRpb25SZXNwb25zZT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2VcclxuICAgICAgLmdldERhdGEoYCR7dGhpcy5hcGlCYXNlVXJsfS9ncm91cHMvcm9zdGVyL2NsYXNzaWZpY2F0aW9uYClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yUmVzKSA9PiB7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvclJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSB0cnVlIGlmIGxvZ2dlZCBpbiB1c2VyIGlzIGFkbWluLlxyXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBpc0FkbWluVXNlcigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnZhbGlkYXRlQWNjZXNzKFBlcm1pc3Npb25UeXBlLk1BTkFHRV9TWVNURU1fVVNFUlMpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBDb25jYXRlbmF0ZXMgdGhlIGdyb3VwIHVzZXJzIGFzc2lnbmVkIHJvbGVzIG5hbWUgc2VwYXJhdGVkIGJ5IGNvbW1hIGFzIHN0cmluZyBhbmQgcmV0dXJucyB0aGUgZ3JvdXAgdXNlcnMgaW4gYW4gYXJyYXkuXHJcbiAgICogQHBhcmFtIHtHZXRHcm91cFVzZXJzUmVzcG9uc2V9IHJlc3BvbnNlXHJcbiAgICogQHJldHVybiB7VXNlcltdfVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgdHJhbnNmb3JtVXNlclJvbGVzTmFtZUFzU3RyaW5nKHJlc3BvbnNlOiBHZXRHcm91cFVzZXJzUmVzcG9uc2UpOiBVc2VyW10ge1xyXG4gICAgY29uc3QgdXNlcnM6IFVzZXJbXSA9IFtdO1xyXG4gICAgcmVzcG9uc2U/LmJvZHk/LmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgY29uc3QgY2xhc3NpZmljYXRpb25EZXNjID1cclxuICAgICAgICBpdGVtLmNsYXNzaWZpY2F0aW9uPy5jbGFzc2lmaWNhdGlvbk5hbWUgK1xyXG4gICAgICAgICcgKCcgK1xyXG4gICAgICAgIGl0ZW0uY2xhc3NpZmljYXRpb24/LmNsYXNzaWZpY2F0aW9uRGVzYyArXHJcbiAgICAgICAgJyknO1xyXG4gICAgICBjb25zdCByb2xlc0xpc3QgPSBpdGVtPy5yb2xlc0xpc3Q/LnJlZHVjZShcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgICAgIChyb2xlTGlzdDogYW55LCByb2xlOiBSb2xlKSA9PiB7XHJcbiAgICAgICAgICByb2xlTGlzdFtcclxuICAgICAgICAgICAgcm9sZS5yb2xlVHlwZU5hbWUgPT09IFJvbGVUeXBlLk1FTUJFUl9MRVZFTCA/ICdtZW1iZXJUeXBlJyA6ICdyb2xlcydcclxuICAgICAgICAgIF0ucHVzaChyb2xlPy5yb2xlTmFtZSk7XHJcbiAgICAgICAgICByZXR1cm4gcm9sZUxpc3Q7XHJcbiAgICAgICAgfSxcclxuICAgICAgICB7IG1lbWJlclR5cGU6IFtdLCByb2xlczogW10gfVxyXG4gICAgICApO1xyXG5cclxuICAgICAgdXNlcnMucHVzaCh7XHJcbiAgICAgICAgdXNlcklkOiBpdGVtLnVzZXJJZCxcclxuICAgICAgICBuYW1lOiBpdGVtLm5hbWUsXHJcbiAgICAgICAgZW1haWw6IGl0ZW0uZW1haWwsXHJcbiAgICAgICAgcm9sZTogcm9sZXNMaXN0Py5yb2xlcz8ubGVuZ3RoID8gcm9sZXNMaXN0Py5yb2xlcz8uam9pbignLCAnKSA6IG51bGwsXHJcbiAgICAgICAgY2xhc3NpZmljYXRpb246IGl0ZW0uY2xhc3NpZmljYXRpb24/LmNsYXNzaWZpY2F0aW9uSWRcclxuICAgICAgICAgID8gY2xhc3NpZmljYXRpb25EZXNjXHJcbiAgICAgICAgICA6IG51bGwsXHJcbiAgICAgICAgbWVtYmVyU3RhdHVzOiByb2xlc0xpc3Q/Lm1lbWJlclR5cGU/Lmxlbmd0aFxyXG4gICAgICAgICAgPyByb2xlc0xpc3Q/Lm1lbWJlclR5cGVbMF1cclxuICAgICAgICAgIDogbnVsbCxcclxuICAgICAgICBvcmdhbml6YXRpb246IGl0ZW0ub3JnYW5pemF0aW9uPy5vcmdOYW1lID8/IG51bGwsXHJcbiAgICAgICAgZW1wbG95ZXI6IGl0ZW0uZW1wbG95ZXI/Lm9yZ05hbWUgPz8gbnVsbCxcclxuICAgICAgICBjYW5EZWxldGU6ICEoXHJcbiAgICAgICAgICBpdGVtPy51c2VySWQgPT09IHRoaXMudXNlckluZm8/LnVzZXJJZCAmJlxyXG4gICAgICAgICAgdGhpcy5pc0FkbWluVXNlcigpICYmXHJcbiAgICAgICAgICB0aGlzLmdldEJ1c2luZXNzUnVsZU9mU2VsZWN0ZWRHcm91cCgpPy5pc0FkbWluXHJcbiAgICAgICAgKSxcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiB1c2VycztcclxuICB9XHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyBmb3JtYXR0ZWQgZ3JvdXAgdHlwZXMuXHJcbiAgICogQHBhcmFtIHtHcm91cFR5cGVDb25maWd1cmF0aW9uW119IGdyb3VwVHlwZVJlc3BvbnNlXHJcbiAgICogQHJldHVybiB7R3JvdXBUeXBlQ29uZmlnVmFsdWV9XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBnZXRGb3JtYXR0ZWRHcm91cFR5cGVzKFxyXG4gICAgZ3JvdXBUeXBlUmVzcG9uc2U6IEdyb3VwVHlwZUNvbmZpZ3VyYXRpb25bXVxyXG4gICk6IEdyb3VwVHlwZUNvbmZpZ1ZhbHVlIHtcclxuICAgIGNvbnN0IGdyb3VwVHlwZXM6IEdyb3VwVHlwZUNvbmZpZ1ZhbHVlID0ge307XHJcbiAgICBncm91cFR5cGVSZXNwb25zZS5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGdyb3VwVHlwZXNbaXRlbS5jb25maWdGaWVsZElkXSA9IGl0ZW0uY29uZmlnRmllbGRWYWx1ZTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGdyb3VwVHlwZXM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIGdyb3VwIHVzZXIgZGV0YWlscyBpZiBlbWFpbCBpcyBmb3VuZCwgZWxzZSB0aHJvd3MgZXJyb3IuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGVtYWlsXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxTZWFyY2hVc2VyQnlFbWFpbFJlc3BvbnNlPn1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIGdldFVzZXJCeUVtYWlsKGVtYWlsOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFNlYXJjaFVzZXJCeUVtYWlsUmVzcG9uc2U+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlXHJcbiAgICAgIC5nZXREYXRhKGAke3RoaXMuYXBpQmFzZVVybH0vZ3JvdXBzL3VzZXJzL3VzZXJCeUVtYWlsLyR7ZW1haWx9YClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yUmVzKSA9PiB7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvclJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgdXNlciBkZXRhaWxzIGZvciB0aGUgc2VsZWN0ZWQgZ3JvdXBcclxuICAgKiBAcGFyYW0ge0dldFVzZXJEZXRhaWxzUGF5bG9hZH0gcGF5bG9hZFxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8QWRkT3JFZGl0R3JvdXBVc2VyRGV0YWlsc1Jlc3BvbnNlPn1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIGdldEdyb3VwVXNlckRldGFpbHMoXHJcbiAgICBwYXlsb2FkOiBHZXRVc2VyRGV0YWlsc1BheWxvYWRcclxuICApOiBPYnNlcnZhYmxlPEFkZE9yRWRpdEdyb3VwVXNlckRldGFpbHNSZXNwb25zZT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2VcclxuICAgICAgLnBvc3REYXRhKGAke3RoaXMuYXBpQmFzZVVybH0vZ3JvdXBzL3Jvc3Rlci91c2VyRGV0YWlsc2AsIHBheWxvYWQpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogUG9zdHMgYWRkIG5ldyB1c2VyIGZvcm0gZGF0YSB0byB0aGUgQVBJIGZvciB0aGUgc2VsZWN0ZWQgZ3JvdXAgYW5kIHJldHVybnMgdGhlIHN1Y2Nlc3Mgb3IgZmFpbHVyZSByZXNwb25zZS5cclxuICAgKiBAcGFyYW0geyhBZGRPckVkaXRVc2VyUGF5bG9hZFxyXG4gICAqICAgICAgIHwgQWRkT3JFZGl0VXNlckluZGl2aWR1YWxSb3N0ZXJQYXlsb2FkKX0gQWRkT3JFZGl0VXNlclBheWxvYWRcclxuICAgKiBAcGFyYW0ge0dyb3VwUm9zdGVyVHlwZX0gZ3JvdXBSb3N0ZXJUeXBlXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxBZGRPckVkaXRHcm91cFVzZXJEZXRhaWxzUmVzcG9uc2U+fVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgYWRkTmV3R3JvdXBVc2VyKFxyXG4gICAgQWRkT3JFZGl0VXNlclBheWxvYWQ6XHJcbiAgICAgIHwgQWRkT3JFZGl0VXNlclBheWxvYWRcclxuICAgICAgfCBBZGRPckVkaXRVc2VySW5kaXZpZHVhbFJvc3RlclBheWxvYWRcclxuICApOiBPYnNlcnZhYmxlPEFkZE9yRWRpdEdyb3VwVXNlckRldGFpbHNSZXNwb25zZT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2VcclxuICAgICAgLnBvc3REYXRhKFxyXG4gICAgICAgIGAke3RoaXMuYXBpQmFzZVVybH0vZ3JvdXBzL3Jvc3Rlci9jcmVhdGVHcm91cFVzZXJSb2xlYCxcclxuICAgICAgICBBZGRPckVkaXRVc2VyUGF5bG9hZFxyXG4gICAgICApXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIGxvYWRlZCBncm91cCB0eXBlIHVzZXIgcm9sZXNcclxuICAgKiBAcGFyYW0ge0NoZWNrYm94T3B0aW9uW119IHVzZXJSb2xlc1xyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgc2V0R3JvdXBUeXBlVXNlclJvbGVzKHVzZXJSb2xlczogQ2hlY2tib3hPcHRpb25bXSk6IHZvaWQge1xyXG4gICAgdGhpcy5ncm91cFR5cGVSb2xlcyA9IHVzZXJSb2xlcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIGdyb3VwIHR5cGUgdXNlciByb2xlcy5cclxuICAgKiBAcmV0dXJuIHtDaGVja2JveE9wdGlvbltdfVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ2V0R3JvdXBUeXBlVXNlclJvbGVzKCk6IENoZWNrYm94T3B0aW9uW10ge1xyXG4gICAgdGhpcy5ncm91cFR5cGVSb2xlcz8ubWFwKChvcHRpb24pID0+IChvcHRpb24uY2hlY2tlZCA9IGZhbHNlKSk7XHJcbiAgICByZXR1cm4gdGhpcy5ncm91cFR5cGVSb2xlcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIHNlbGVjdGVkIHVzZXIgaW5mby5cclxuICAgKiBAcGFyYW0ge0dyb3VwVXNlckluZm99IHVzZXJJbmZvXHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBzZXRTZWxlY3RlZFVzZXJJbmZvKHVzZXJJbmZvOiBHcm91cFVzZXJJbmZvKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGVkVXNlckluZm8gPSB1c2VySW5mbztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgc2VsZWN0ZWQgdXNlciBpbmZvLlxyXG4gICAqIEByZXR1cm4ge0dyb3VwVXNlckluZm99XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBnZXRTZWxlY3RlZFVzZXJJbmZvKCk6IEdyb3VwVXNlckluZm8ge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRVc2VySW5mbztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZXMgZ3JvdXAgdXNlciByb2xlcyBhbmQgb3RoZXIgZGV0YWlscyB0byBzZXJ2ZXIgdXNpbmcgSHR0cFNlcnZpY2UuXHJcbiAgICogQHBhcmFtIHsoQWRkT3JFZGl0VXNlclBheWxvYWQgfCBBZGRPckVkaXRVc2VySW5kaXZpZHVhbFJvc3RlclBheWxvYWQpfSBwYXlsb2FkXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxBZGRPckVkaXRHcm91cFVzZXJEZXRhaWxzUmVzcG9uc2U+fVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZWRpdEdyb3Vwc1VzZXJSb2xlKFxyXG4gICAgcGF5bG9hZDogQWRkT3JFZGl0VXNlclBheWxvYWQgfCBBZGRPckVkaXRVc2VySW5kaXZpZHVhbFJvc3RlclBheWxvYWRcclxuICApOiBPYnNlcnZhYmxlPEFkZE9yRWRpdEdyb3VwVXNlckRldGFpbHNSZXNwb25zZT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2VcclxuICAgICAgLnB1dERhdGEoYCR7dGhpcy5hcGlCYXNlVXJsfS9ncm91cHMvcm9zdGVyL2VkaXRHcm91cFVzZXJSb2xlYCwgcGF5bG9hZClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyByb3N0ZXIgZnVuY3Rpb24gdHlwZS5cclxuICAgKiBAcGFyYW0ge1Jvc3RlckZ1bmN0aW9uVHlwZX0gcm9zdGVyRnVuY3Rpb25UeXBlXHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBzZXRSb3N0ZXJGdW5jdGlvblR5cGUocm9zdGVyRnVuY3Rpb25UeXBlOiBSb3N0ZXJGdW5jdGlvblR5cGUpOiB2b2lkIHtcclxuICAgIHRoaXMucm9zdGVyRnVuY3Rpb25UeXBlID0gcm9zdGVyRnVuY3Rpb25UeXBlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyByb3N0ZXIgZnVuY3Rpb24gdHlwZS5cclxuICAgKiBAcmV0dXJuIHtSb3N0ZXJGdW5jdGlvblR5cGV9XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBnZXRSb3N0ZXJGdW5jdGlvblR5cGUoKTogUm9zdGVyRnVuY3Rpb25UeXBlIHtcclxuICAgIHJldHVybiB0aGlzLnJvc3RlckZ1bmN0aW9uVHlwZTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgZ3JvdXBzIGJhc2VkIG9uIHRoZSBzZWFyY2ggYnkgZ3JvdXAgbmFtZSBvciBhY3JvbnltLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzZWFyY2hUZXJtXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxHZXRHcm91cFVzZXJzUmVzcG9uc2U+fVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ3JvdXBzQnlOYW1lQWNyb255bShcclxuICAgIHNlYXJjaFRlcm06IHN0cmluZyxcclxuICAgIGZpbHRlcmVkR3JvdXBUeXBlPzogbnVtYmVyXHJcbiAgKTogT2JzZXJ2YWJsZTxHZXRHcm91cFJlc3BvbnNlPiB7XHJcbiAgICBjb25zdCBzZWFyY2hHcm91cHNVcmwgPSBgJHt0aGlzLmFwaUJhc2VVcmx9L2dyb3Vwcy9ncm91cHNCeU5hbWVBY3JvbnltP25hbWU9JHtzZWFyY2hUZXJtfWA7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAuZ2V0RGF0YShcclxuICAgICAgICBmaWx0ZXJlZEdyb3VwVHlwZVxyXG4gICAgICAgICAgPyBzZWFyY2hHcm91cHNVcmwgKyBgJmdyb3VwVHlwZT0ke2ZpbHRlcmVkR3JvdXBUeXBlfWBcclxuICAgICAgICAgIDogc2VhcmNoR3JvdXBzVXJsXHJcbiAgICAgIClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yUmVzKSA9PiB7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvclJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSB1c2VyIGdyb3VwIHBlcm1pc3Npb25zXHJcbiAgICogQHBhcmFtIHtHcm91cFBlcm1pc3Npb25bXX0gdXNlckdyb3VwUGVybWlzc2lvbnNcclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIHNldFVzZXJHcm91cFBlcm1pc3Npb25zKHVzZXJHcm91cFBlcm1pc3Npb25zOiBHcm91cFBlcm1pc3Npb25bXSkge1xyXG4gICAgdGhpcy51c2VyR3JvdXBQZXJtaXNzaW9ucyA9IHVzZXJHcm91cFBlcm1pc3Npb25zO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSB1c2VyIGdyb3VwIHBlcm1pc3Npb25zXHJcbiAgICogQHJldHVybiB7R3JvdXBQZXJtaXNzaW9uW119XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBnZXRVc2VyR3JvdXBQZXJtaXNzaW9ucygpOiBHcm91cFBlcm1pc3Npb25bXSB7XHJcbiAgICByZXR1cm4gdGhpcy51c2VyR3JvdXBQZXJtaXNzaW9ucztcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgbG9nZ2VkIEluIHVzZXIgaW5mb3JtYXRpb24uXHJcbiAgICogQHBhcmFtIHtMb2dnZWRJblVzZXJJbmZvfSB1c2VySW5mb1xyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgc2V0VXNlckluZm8odXNlckluZm86IExvZ2dlZEluVXNlckluZm8pOiB2b2lkIHtcclxuICAgIHRoaXMudXNlckluZm8gPSB1c2VySW5mbztcclxuICB9XHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgbG9nZ2VkIGluIHVzZXIgaW5mb3JtYXRpb24uXHJcbiAgICogQHJldHVybiB7TG9nZ2VkSW5Vc2VySW5mb31cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIGdldFVzZXJJbmZvKCk6IExvZ2dlZEluVXNlckluZm8ge1xyXG4gICAgcmV0dXJuIHRoaXMudXNlckluZm87XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFZhbGlkYXRlcyBwZXJtaXNzaW9uIGJhc2VkIGFjY2VzcyBmb3IgcHJvdmlkZWQgZmVhdHVyZS5cclxuICAgKiBDaGVja3MgZm9yIGdyb3VwIGxldmVsIHBlcm1pc3Npb25zLCBhbmQgcHJvdmlkZXMgYWNjZXNzIGJhc2VkIG9uIGluZGl2aWR1YWwgZ3JvdXAgcGVybWlzc2lvbnMuXHJcbiAgICogRm9yIGdsb2JhbCBwZXJtaXNzaW9ucyBwcm92aWRlcyBhY2Nlc3MgYWNyb3NzIHRoZSBpbmRpdmlkdWFsIGdyb3VwcyBvciBTeXN0ZW0gZ3JvdXBzLlxyXG4gICAqIEBwYXJhbSB7UGVybWlzc2lvblR5cGV9IHBlcm1pc3Npb25UeXBlXHJcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIHZhbGlkYXRlQWNjZXNzKFxyXG4gICAgcGVybWlzc2lvblR5cGU6IFBlcm1pc3Npb25UeXBlLFxyXG4gICAgcGVybWlzc2lvbnM/OiBVc2VyUGVybWlzc2lvbltdIHwgbnVsbFxyXG4gICk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHBlcm1pc3Npb25zKSB7XHJcbiAgICAgIGNvbnN0IHVzZXJQZXJtaXNzaW9uc1RvR3JvdXAgPVxyXG4gICAgICAgIHRoaXMudXNlclBlcm1pc3Npb25zU2VydmljZS5maWx0ZXJVc2VyR3JvdXBQZXJtaXNzaW9ucyhcclxuICAgICAgICAgIHBlcm1pc3Npb25zLFxyXG4gICAgICAgICAgdGhpcy5ncm91cFBlcm1pc3Npb25zU2VydmljZS5nZXRHcm91cFBlcm1pc3Npb25zKClcclxuICAgICAgICApO1xyXG4gICAgICByZXR1cm4gdGhpcy51c2VyUGVybWlzc2lvbnNTZXJ2aWNlLnZhbGlkYXRlQWNjZXNzUGVybWlzc2lvbihcclxuICAgICAgICBwZXJtaXNzaW9uVHlwZSxcclxuICAgICAgICB1c2VyUGVybWlzc2lvbnNUb0dyb3VwXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy51c2VyUGVybWlzc2lvbnNTZXJ2aWNlLnZhbGlkYXRlQWNjZXNzUGVybWlzc2lvbihcclxuICAgICAgcGVybWlzc2lvblR5cGUsXHJcbiAgICAgIHRoaXMuZ2V0VXNlckdyb3VwUGVybWlzc2lvbnMoKVxyXG4gICAgKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU3RvcmUgdGhlIGxvYWRlZCBncm91cCB0eXBlcy5cclxuICAgKiBAcGFyYW0ge0dyb3VwVHlwZUNvbmZpZ3VyYXRpb25bXX0gZ3JvdXBUeXBlc1xyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgc2V0TG9hZGVkR3JvdXBUeXBlcyhncm91cFR5cGVzOiBHcm91cFR5cGVDb25maWd1cmF0aW9uW10pIHtcclxuICAgIHRoaXMuZ3JvdXBUeXBlcyA9IGdyb3VwVHlwZXM7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFJldHVybiB0aGUgbG9hZGVkIGdyb3VwIHR5cGVzLlxyXG4gICAqIEByZXR1cm4ge0dyb3VwVHlwZUNvbmZpZ3VyYXRpb25bXX1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIGdldExvYWRlZEdyb3VwVHlwZXMoKTogR3JvdXBUeXBlQ29uZmlndXJhdGlvbltdIHtcclxuICAgIHJldHVybiB0aGlzLmdyb3VwVHlwZXM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T3JnYW5pemF0aW9uUmVxdWVzdFBheWxvYWR9IG9yZ1JlcXVlc3RQYXlsb2FkXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxPcmdhbml6YXRpb25SZXNwb25zZT59XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBnZXRPcmdhbml6YXRpb25zKFxyXG4gICAgb3JnUmVxdWVzdFBheWxvYWQ6IE9yZ2FuaXphdGlvblJlcXVlc3RQYXlsb2FkXHJcbiAgKTogT2JzZXJ2YWJsZTxPcmdhbml6YXRpb25SZXNwb25zZT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2VcclxuICAgICAgLnBvc3REYXRhKFxyXG4gICAgICAgIGAke3RoaXMuYXBpQmFzZVVybH0vZ3JvdXBzL3Jvc3Rlci9vcmdhbml6YXRpb25zYCxcclxuICAgICAgICBvcmdSZXF1ZXN0UGF5bG9hZFxyXG4gICAgICApXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvclJlcykgPT4ge1xyXG4gICAgICAgICAgdGhyb3cgZXJyb3JSZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgZ3JvdXAgdHlwZSBjb25maWd1cmF0aW9uIEJ1c2luZXNzIHJ1bGUgZm9yIHRoZSBzZWxlY3RlZCBncm91cC5cclxuICAgKiBAcmV0dXJuIHsoQnVzaW5lc3NSdWxlICB8IHVuZGVmaW5lZCl9XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBnZXRCdXNpbmVzc1J1bGVPZlNlbGVjdGVkR3JvdXAoKTogQnVzaW5lc3NSdWxlIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLmdldExvYWRlZEdyb3VwVHlwZXMoKT8uZmluZChcclxuICAgICAgKGdyb3VwKSA9PiBncm91cD8uY29uZmlnRmllbGRJZCA9PT0gdGhpcy5nZXRTZWxlY3RlZEdyb3VwSW5mbygpPy5ncm91cFR5cGVcclxuICAgICk/LmNvbmZpZ0ZpZWxkVmFsdWU/LmJ1c2luZXNzUnVsZTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgZm9ybSBzdWJtaXQgYnV0dG9uIGJhc2VkIG9uIHBhc3NlZCBwYXJhbWV0ZXJzLlxyXG4gICAqIEBwYXJhbSB7R3JvdXBSb3N0ZXJUeXBlfSBncm91cFJvc3RlclR5cGVcclxuICAgKiBAcGFyYW0ge0Zvcm1Db250cm9sU3RhdHVzfSBmb3JtU3RhdHVzXHJcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gc2VsZWN0ZWRVc2VyUm9sZXNcclxuICAgKiBAcmV0dXJuIHtib29sZWFufVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgaXNTdWJtaXRCdXR0b25EaXNhYmxlZChcclxuICAgIGdyb3VwUm9zdGVyVHlwZTogR3JvdXBSb3N0ZXJUeXBlLFxyXG4gICAgZm9ybVN0YXR1czogRm9ybUNvbnRyb2xTdGF0dXMsXHJcbiAgICBzZWxlY3RlZFVzZXJSb2xlczogc3RyaW5nW11cclxuICApOiBib29sZWFuIHtcclxuICAgIGlmIChncm91cFJvc3RlclR5cGUgPT09IEdyb3VwUm9zdGVyVHlwZS5JTkRJVklEVUFMKVxyXG4gICAgICByZXR1cm4gZm9ybVN0YXR1cyA9PT0gRm9ybVN0YXR1cy5JTlZBTElEO1xyXG4gICAgcmV0dXJuIHNlbGVjdGVkVXNlclJvbGVzPy5sZW5ndGggPT09IDAgfHwgZm9ybVN0YXR1cyA9PT0gRm9ybVN0YXR1cy5JTlZBTElEO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyBpc1BhcmVudEdyb3VwQ2hhbmdlZCB0cnVlIG9yIGZhbHNlLlxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNQYXJlbnRHcm91cENoYW5nZWRcclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIHNldFBhcmVudEdyb3VwQ2hhbmdlU3RhdHVzKGlzUGFyZW50R3JvdXBDaGFuZ2VkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzUGFyZW50R3JvdXBDaGFuZ2VkID0gaXNQYXJlbnRHcm91cENoYW5nZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIGlzUGFyZW50R3JvdXBDaGFuZ2VkIHZhbHVlLlxyXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBnZXRQYXJlbnRHcm91cENoYW5nZVN0YXR1cygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmlzUGFyZW50R3JvdXBDaGFuZ2VkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgbWVtYmVyIHR5cGVzLlxyXG4gICAqIEBwYXJhbSB7Um9sZVtdfSBtZW1iZXJUeXBlc1xyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgc2V0TWVtYmVyVHlwZXMobWVtYmVyVHlwZXM6IFJvbGVbXSk6IHZvaWQge1xyXG4gICAgdGhpcy5tZW1iZXJUeXBlcyA9IG1lbWJlclR5cGVzO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBtZW1iZXIgdHlwZXMuXHJcbiAgICogQHJldHVybiB7Um9sZVtdfVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ2V0TWVtYmVyVHlwZXMoKTogUm9sZVtdIHtcclxuICAgIHJldHVybiB0aGlzLm1lbWJlclR5cGVzO1xyXG4gIH1cclxufVxyXG4iXX0=
|