@microsoft/windows-admin-center-sdk 2.523.1 → 2.538.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/angular/bundles/microsoft-windows-admin-center-sdk-angular.umd.js +88 -41
- package/angular/bundles/microsoft-windows-admin-center-sdk-angular.umd.js.map +1 -1
- package/angular/bundles/microsoft-windows-admin-center-sdk-angular.umd.min.js +1 -1
- package/angular/bundles/microsoft-windows-admin-center-sdk-angular.umd.min.js.map +1 -1
- package/angular/esm2015/src/controls/data-table/data-table.component.js +6 -2
- package/angular/esm2015/src/controls/dialog/dialog.component.js +11 -11
- package/angular/esm2015/src/controls/dialog/extension-dialog/extension-dialog.component.js +7 -7
- package/angular/esm2015/src/controls/header/header.component.js +52 -14
- package/angular/esm2015/src/controls/layout/layout-config.js +1 -2
- package/angular/esm2015/src/controls/query-editor/query-editor.component.js +4 -4
- package/angular/esm2015/src/controls/snap-in-extension/snap-in-extension.component.js +1 -1
- package/angular/fesm2015/microsoft-windows-admin-center-sdk-angular.js +75 -34
- package/angular/fesm2015/microsoft-windows-admin-center-sdk-angular.js.map +1 -1
- package/angular/src/controls/header/header.component.d.ts +14 -1
- package/angular/src/controls/query-editor/query-editor.component.d.ts +1 -1
- package/core/data/active-directory/active-directory.js +2 -2
- package/core/data/active-directory/active-directory.js.map +1 -1
- package/core/data/powershell.d.ts +2 -2
- package/core/data/powershell.js +2 -2
- package/core/data/powershell.js.map +1 -1
- package/core/notification/notification-manager.d.ts +18 -0
- package/core/notification/notification-manager.js +55 -10
- package/core/notification/notification-manager.js.map +1 -1
- package/core/notification/notification-message.d.ts +41 -0
- package/core/notification/notification-message.js +3 -0
- package/core/notification/notification-message.js.map +1 -0
- package/core/notification/notification.d.ts +10 -1
- package/core/notification/notification.js +30 -33
- package/core/notification/notification.js.map +1 -1
- package/core/notification/powershell-notification.d.ts +15 -15
- package/core/notification/powershell-notification.js +19 -8
- package/core/notification/powershell-notification.js.map +1 -1
- package/core/notification/socket-signalr.d.ts +8 -14
- package/core/notification/socket-signalr.js +18 -19
- package/core/notification/socket-signalr.js.map +1 -1
- package/core/notification/work-item-manager.d.ts +4 -0
- package/core/notification/work-item-manager.js +76 -20
- package/core/notification/work-item-manager.js.map +1 -1
- package/e2e/assets/strings/cs-CZ/strings.json +1 -1
- package/e2e/assets/strings/de-DE/strings.json +1 -1
- package/e2e/assets/strings/es-ES/strings.json +1 -1
- package/e2e/assets/strings/fr-FR/strings.json +1 -1
- package/e2e/assets/strings/hu-HU/strings.json +1 -1
- package/e2e/assets/strings/id-ID/strings.json +1 -1
- package/e2e/assets/strings/it-IT/strings.json +1 -1
- package/e2e/assets/strings/ja-JP/strings.json +1 -1
- package/e2e/assets/strings/ko-KR/strings.json +1 -1
- package/e2e/assets/strings/nl-NL/strings.json +1 -1
- package/e2e/assets/strings/pl-PL/strings.json +1 -1
- package/e2e/assets/strings/pt-BR/strings.json +1 -1
- package/e2e/assets/strings/pt-PT/strings.json +1 -1
- package/e2e/assets/strings/ru-RU/strings.json +1 -1
- package/e2e/assets/strings/strings.json +1 -1
- package/e2e/assets/strings/sv-SE/strings.json +1 -1
- package/e2e/assets/strings/tr-TR/strings.json +1 -1
- package/e2e/assets/strings/zh-CN/strings.json +1 -1
- package/e2e/assets/strings/zh-TW/strings.json +1 -1
- package/package.json +3 -6
- package/styles/css/main-v2.css +1 -1
- package/tools/test-runner/index.js +12 -2
- package/tools/test-runner/index.js.map +1 -1
- package/tools/wac-cli/templates/internal/package.json +0 -4
- package/tools/wac-cli/templates/library/angular.json +0 -3
- package/tools/wac-cli/templates/library/tsconfig.lib.json +1 -1
- package/tools/wac-cli/templates/wac-template/angular.json +0 -3
- package/tools/wac-cli/templates/wac-template/package.json +0 -4
- package/tools/wac-cli/templates/wac-template/tsconfig.base.json +23 -24
|
@@ -227,9 +227,8 @@ function QueryEditorComponent_ng_container_0_ng_container_1_div_1_form_4_ng_cont
|
|
|
227
227
|
function QueryEditorComponent_ng_container_0_ng_container_1_div_1_form_4_ng_container_5_sme_form_field_3_sme_option_1_Template(rf, ctx) { if (rf & 1) {
|
|
228
228
|
i0.ɵɵelement(0, "sme-option", 32);
|
|
229
229
|
} if (rf & 2) {
|
|
230
|
-
const
|
|
231
|
-
|
|
232
|
-
i0.ɵɵproperty("value", ctx_r63.queryDataOperand[option_r64])("label", ctx_r63.queryDataOperand[option_r64]);
|
|
230
|
+
const operand_r64 = ctx.$implicit;
|
|
231
|
+
i0.ɵɵproperty("value", operand_r64.value)("label", operand_r64.value);
|
|
233
232
|
} }
|
|
234
233
|
function QueryEditorComponent_ng_container_0_ng_container_1_div_1_form_4_ng_container_5_sme_form_field_3_Template(rf, ctx) { if (rf & 1) {
|
|
235
234
|
const _r67 = i0.ɵɵgetCurrentView();
|
|
@@ -493,6 +492,7 @@ function QueryEditorComponent_ng_template_8_Template(rf, ctx) { if (rf & 1) {
|
|
|
493
492
|
export class QueryEditorComponent extends CoreBaseComponent {
|
|
494
493
|
constructor() {
|
|
495
494
|
super(...arguments);
|
|
495
|
+
this.operands = [];
|
|
496
496
|
this.columnsDropdownData = [];
|
|
497
497
|
this.columnDropdownData = [];
|
|
498
498
|
this.resourceStrings = MsftSme.getStrings().MsftSmeShell.Angular.QueryEditor;
|
|
@@ -1423,4 +1423,4 @@ const ɵQueryEditorComponent_BaseFactory = /*@__PURE__*/ i0.ɵɵgetInheritedFact
|
|
|
1423
1423
|
type: HostListener,
|
|
1424
1424
|
args: ['document:mouseup']
|
|
1425
1425
|
}], onValueFieldEnterKeydown: [], focusOnSelectedHtml: [], focusOnSelectedHtmlHelper: [], focusOnElementInTrap: [], onPillExitTrap: [], focusOnNewQueryPill: [], focusOnTheNextPillAfterRemove: [], getTimerangeDisplayValue: [], checkValueFieldTruncated: [] }); })();
|
|
1426
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FuZ3VsYXIvc3JjL2NvbnRyb2xzL3F1ZXJ5LWVkaXRvci9xdWVyeS1lZGl0b3IuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYW5ndWxhci9zcmMvY29udHJvbHMvcXVlcnktZWRpdG9yL3F1ZXJ5LWVkaXRvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxXQUFXLEVBQ1gsWUFBWSxFQUNaLEtBQUssRUFHTCxTQUFTLEVBQ1QsV0FBVyxFQUNYLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sK0RBQStELENBQUM7QUFDMUYsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDhFQUE4RSxDQUFDO0FBQ3hHLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSwwRUFBMEUsQ0FBQztBQUNqRyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0VBQWdFLENBQUM7QUFDMUYsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDhEQUE4RCxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUV2RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUU3RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN4RSxPQUFPLEVBQ0gsU0FBUyxFQUtULHNCQUFzQixFQUN0QixnQkFBZ0IsRUFDbkIsTUFBTSx5QkFBeUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lDakJ6QiwyQkFBdUc7OztJQUE3Qix1Q0FBcUI7OztJQUcvRix3Q0FDb0I7O0lBRDRCLDhDQUFnQzs7O0lBUTVFLHlCQUNpTTtJQUFBLFlBQXlCO0lBQUEsaUJB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QVk7bUJBQUMsU0FBUztZQU92QixVQUFVO2tCQURULFlBQVk7bUJBQUMsa0JBQWtCO1lBVXpCLHdCQUF3QixNQVd2QixtQkFBbUIsTUFTbkIseUJBQXlCLE1BeUJ6QixvQkFBb0IsTUFRckIsY0FBYyxNQStHYixtQkFBbUIsTUFzR25CLDZCQUE2QixNQXNGOUIsd0JBQXdCLE1BcUd4Qix3QkFBd0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gICAgQ29tcG9uZW50LFxyXG4gICAgSG9zdEJpbmRpbmcsXHJcbiAgICBIb3N0TGlzdGVuZXIsXHJcbiAgICBJbnB1dCxcclxuICAgIE9uRGVzdHJveSxcclxuICAgIE9uSW5pdCxcclxuICAgIFF1ZXJ5TGlzdCxcclxuICAgIFRlbXBsYXRlUmVmLFxyXG4gICAgVmlld0NoaWxkXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IERhdGVSYW5nZSB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvYmFzZS9kYXRlL2RhdGUtcmFuZ2UnO1xyXG5pbXBvcnQgeyBEZWJvdW5jZSB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvYmFzZS9kZWNvcmF0b3JzL2RlYm91bmNlLmRlY29yYXRvcnMnO1xyXG5pbXBvcnQgeyBZaWVsZCB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvYmFzZS9kZWNvcmF0b3JzL3lpZWxkLmRlY29yYXRvcic7XHJcbmltcG9ydCB7IExvZ0xldmVsIH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9kaWFnbm9zdGljcy9sb2ctbGV2ZWwnO1xyXG5pbXBvcnQgeyBMb2dnaW5nIH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9kaWFnbm9zdGljcy9sb2dnaW5nJztcclxuaW1wb3J0IHsgRG9tIH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9kb20vZG9tJztcclxuaW1wb3J0IHsgU3RyaW5ncyB9IGZyb20gJy4uLy4uL2dlbmVyYXRlZC9zdHJpbmdzJztcclxuaW1wb3J0IHsgQ29yZUJhc2VDb21wb25lbnQgfSBmcm9tICcuLi9jb21tb24vYmFzZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBEYXRhVGFibGVDb2x1bW5Db21wb25lbnQgfSBmcm9tICcuLi9kYXRhLXRhYmxlL2RhdGEtdGFibGUtY29sdW1uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IERhdGFUYWJsZUNvbXBvbmVudCB9IGZyb20gJy4uL2RhdGEtdGFibGUvZGF0YS10YWJsZS5jb21wb25lbnQnO1xyXG5pbXBvcnQge1xyXG4gICAgQXBwbHlNb2RlLFxyXG4gICAgUXVlcnlEYXRhLFxyXG4gICAgUXVlcnlEYXRhSXRlbSxcclxuICAgIFF1ZXJ5RGF0YUl0ZW1QcmVzZXRPcHRpb25Db250ZW50LFxyXG4gICAgUXVlcnlEYXRhSXRlbVByZXNldE9wdGlvbnMsXHJcbiAgICBRdWVyeURhdGFJdGVtVmFsdWVUeXBlLFxyXG4gICAgUXVlcnlEYXRhT3BlcmFuZFxyXG59IGZyb20gJy4vcXVlcnktZWRpdG9yLWNvbnRyYWN0JztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUXVlcnlFZGl0b3JEYXRhVGFibGVDb2x1bW5MaXN0SXRlbSB7XHJcbiAgICBsYWJlbDogc3RyaW5nO1xyXG4gICAgdmFsdWU6IHN0cmluZztcclxuICAgIHF1ZXJ5RWRpdG9yVHlwZTogUXVlcnlEYXRhSXRlbVZhbHVlVHlwZTtcclxuICAgIHByZXNldE9wdGlvbnM/OiBRdWVyeURhdGFJdGVtUHJlc2V0T3B0aW9uQ29udGVudFtdO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFF1ZXJ5RWRpdG9yQ29sdW1uRHJvcGRvd25EYXRhIHtcclxuICAgIGZpZWxkOiBzdHJpbmc7XHJcbiAgICBpc0Ryb3Bkb3duOiBib29sZWFuO1xyXG4gICAgcXVlcnlFZGl0b3JUeXBlOiBRdWVyeURhdGFJdGVtVmFsdWVUeXBlO1xyXG4gICAgb3B0aW9ucz86IHN0cmluZ1tdO1xyXG4gICAgcHJlc2V0T3B0aW9ucz86IFF1ZXJ5RGF0YUl0ZW1QcmVzZXRPcHRpb25Db250ZW50W107XHJcbn1cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3NtZS1xdWVyeS1lZGl0b3InLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3F1ZXJ5LWVkaXRvci5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFF1ZXJ5RWRpdG9yQ29tcG9uZW50IGV4dGVuZHMgQ29yZUJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgICBwdWJsaWMgcXVlcnlFZGl0b3I6IFF1ZXJ5RGF0YTtcclxuICAgIHB1YmxpYyBpbnRlcm5hbENvbHVtbkxpc3Q6IFF1ZXJ5RWRpdG9yRGF0YVRhYmxlQ29sdW1uTGlzdEl0ZW1bXTtcclxuICAgIHB1YmxpYyBvcGVyYW5kczogQXJyYXk8UXVlcnlEYXRhT3BlcmFuZD47XHJcbiAgICBwdWJsaWMgY29sdW1uc0Ryb3Bkb3duRGF0YTogQXJyYXk8UXVlcnlFZGl0b3JDb2x1bW5Ecm9wZG93bkRhdGE+ID0gW107XHJcbiAgICBwdWJsaWMgY29sdW1uRHJvcGRvd25EYXRhOiBBcnJheTxhbnk+ID0gW107XHJcbiAgICBwdWJsaWMgY29sdW1uRHJvcGRvd25GaWVsZDogc3RyaW5nO1xyXG4gICAgcHVibGljIGlzQ29sdW1uRHJvcGRvd25CdXN5OiBib29sZWFuO1xyXG4gICAgcHVibGljIGN1cnJlbnRNb2RpZnlpbmdJbmRleDogbnVtYmVyO1xyXG4gICAgcHVibGljIHJlc291cmNlU3RyaW5ncyA9IE1zZnRTbWUuZ2V0U3RyaW5nczxTdHJpbmdzPigpLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLlF1ZXJ5RWRpdG9yO1xyXG4gICAgcHVibGljIGlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgcHVibGljIHNlbGVjdGVkSHRtbDogSFRNTEVsZW1lbnQ7XHJcbiAgICBwdWJsaWMgcG9zdFNlbGVjdGVkSHRtbDogSFRNTEVsZW1lbnQ7XHJcbiAgICBwdWJsaWMgZ2V0IHF1ZXJ5RGF0YUl0ZW1WYWx1ZVR5cGUoKSB7XHJcbiAgICAgICAgcmV0dXJuIFF1ZXJ5RGF0YUl0ZW1WYWx1ZVR5cGU7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IHF1ZXJ5RGF0YU9wZXJhbmQoKSB7XHJcbiAgICAgICAgcmV0dXJuIFF1ZXJ5RGF0YU9wZXJhbmQ7XHJcbiAgICB9XHJcblxyXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLnJvbGUnKVxyXG4gICAgcHVibGljIGdldCByb2xlKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5xdWVyeUVkaXRvciB8fCAhdGhpcy5xdWVyeUVkaXRvci5jb250ZW50cykge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAnbWVudWJhcic7XHJcbiAgICB9XHJcblxyXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtbGFiZWwnKVxyXG4gICAgcHVibGljIGdldCBhcmlhTGFiZWwoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVzb3VyY2VTdHJpbmdzLkNvbHVtbkZpbHRlcjtcclxuICAgIH1cclxuXHJcbiAgICBAVmlld0NoaWxkKCdtdWx0aVNlbGVjdFRlbXBsYXRlJylcclxuICAgIHB1YmxpYyBtdWx0aVNlbGVjdFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxRdWVyeURhdGFJdGVtPjtcclxuXHJcbiAgICBAVmlld0NoaWxkKCd0ZXh0VGVtcGxhdGUnKVxyXG4gICAgcHVibGljIHRleHRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8UXVlcnlEYXRhSXRlbT47XHJcblxyXG4gICAgQFZpZXdDaGlsZCgnc2luZ2xlU2VsZWN0VGVtcGxhdGUnKVxyXG4gICAgcHVibGljIHNpbmdsZVNlbGVjdFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxRdWVyeURhdGFJdGVtPjtcclxuXHJcbiAgICBAVmlld0NoaWxkKCd0aW1lc3BhblNlbGVjdFRlbXBsYXRlJylcclxuICAgIHB1YmxpYyB0aW1lc3BhblNlbGVjdFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxRdWVyeURhdGFJdGVtPjtcclxuXHJcblxyXG4gICAgcHJpdmF0ZSBlbmFibGVHZXREYXRhVGFibGVVbmlxdWVWYWx1ZXMgPSBmYWxzZTtcclxuICAgIHByaXZhdGUgaXNGb2N1c0luc2lkZUNvbXBvbmVudCA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBpc0NvbXBvbmVudENsaWNrZWQgPSBmYWxzZTtcclxuICAgIHByaXZhdGUgc2VsZWN0ZWRJdGVtOiBRdWVyeURhdGFJdGVtO1xyXG4gICAgcHJpdmF0ZSBpc0VkaXRpbmcgPSBmYWxzZTtcclxuICAgIHByaXZhdGUgY2hlY2tWYWx1ZUZpZWxkVHJ1bmNhdGVkUmVjb3JkcyA9IG5ldyBBcnJheSgpO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgYXBwbHlNb2RlOiBBcHBseU1vZGUgPSBBcHBseU1vZGUuQWN0aXZlO1xyXG5cclxuICAgIHByaXZhdGUgaW50ZXJuYWxQcmVzZXRRdWVyeUVkaXRvcjtcclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgc2V0IHByZXNldFF1ZXJ5RWRpdG9yKGlucHV0OiBRdWVyeURhdGEpIHtcclxuICAgICAgICB0aGlzLmludGVybmFsUHJlc2V0UXVlcnlFZGl0b3IgPSBpbnB1dDtcclxuICAgICAgICB0aGlzLnVwZGF0ZVByZXNldFF1ZXJ5RWRpdG9yQ3VzdG9tTGFiZWxzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBwcmVzZXRRdWVyeUVkaXRvcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pbnRlcm5hbFByZXNldFF1ZXJ5RWRpdG9yO1xyXG4gICAgfVxyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgc2hvd0FkZEJ1dHRvbiA9IHRydWU7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBzaG93UmVzZXRCdXR0b24gPSB0cnVlO1xyXG5cclxuICAgIHB1YmxpYyBkaXNhYmxlUmVzZXRCdXR0b24gPSBmYWxzZTtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGRhdGFUYWJsZTogRGF0YVRhYmxlQ29tcG9uZW50O1xyXG5cclxuICAgIHByb3RlY3RlZCBnZXQgbG9nU291cmNlTmFtZSgpIHtcclxuICAgICAgICByZXR1cm4gJ1F1ZXJ5RWRpdG9yQ29tcG9uZW50JztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBkaXNhYmxlUmVzZXRCdXR0b24gdmFsdWVcclxuICAgICAqIGRpc2FibGVSZXNldEJ1dHRvbiA9IHRydWUgaWYgcXVlcnlFZGl0b3IuY29udGVudHMgPT0gMFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHNldERpc2FibGVSZXNldEJ1dHRvbigpOiB2b2lkIHtcclxuICAgICAgICBpZiAoTXNmdFNtZS5pc051bGxPclVuZGVmaW5lZCh0aGlzLnF1ZXJ5RWRpdG9yKSkge1xyXG4gICAgICAgICAgICB0aGlzLmRpc2FibGVSZXNldEJ1dHRvbiA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlUmVzZXRCdXR0b24gPSB0aGlzLnF1ZXJ5RWRpdG9yLmNvbnRlbnRzLmxlbmd0aCA9PT0gMDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5pbml0aWFsaXplT3BlcmFuZHNMaXN0KCk7XHJcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xyXG5cclxuICAgICAgICAvLyBTZXQgZGlzYWJsZVJlc2V0QnV0dG9uIHZhbHVlXHJcbiAgICAgICAgdGhpcy5zZXREaXNhYmxlUmVzZXRCdXR0b24oKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpIHsgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRUZW1wbGF0ZShpdGVtOiBRdWVyeURhdGFJdGVtKSB7XHJcbiAgICAgICAgc3dpdGNoIChpdGVtLnZhbHVlLnR5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSBRdWVyeURhdGFJdGVtVmFsdWVUeXBlLk11bHRpU2VsZWN0RHJvcGRvd246XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tdWx0aVNlbGVjdFRlbXBsYXRlO1xyXG4gICAgICAgICAgICBjYXNlIFF1ZXJ5RGF0YUl0ZW1WYWx1ZVR5cGUuU2luZ2xlRHJvcGRvd246XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zaW5nbGVTZWxlY3RUZW1wbGF0ZTtcclxuICAgICAgICAgICAgY2FzZSBRdWVyeURhdGFJdGVtVmFsdWVUeXBlLlRpbWVzcGFuRHJvcGRvd246XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50aW1lc3BhblNlbGVjdFRlbXBsYXRlO1xyXG4gICAgICAgICAgICBjYXNlIFF1ZXJ5RGF0YUl0ZW1WYWx1ZVR5cGUuVGV4dElucHV0OlxyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudGV4dFRlbXBsYXRlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0SXRlbURpc3BsYXlWYWx1ZShpdGVtOiBRdWVyeURhdGFJdGVtKSB7XHJcbiAgICAgICAgc3dpdGNoIChpdGVtLnZhbHVlLnR5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSBRdWVyeURhdGFJdGVtVmFsdWVUeXBlLk11bHRpU2VsZWN0RHJvcGRvd246XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZXNvdXJjZVN0cmluZ3MuU2VsZWN0ZWQuZm9ybWF0KGl0ZW0udmFsdWUudmFsdWUubGVuZ3RoKTtcclxuICAgICAgICAgICAgY2FzZSBRdWVyeURhdGFJdGVtVmFsdWVUeXBlLlNpbmdsZURyb3Bkb3duOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0udmFsdWUudmFsdWU7XHJcbiAgICAgICAgICAgIGNhc2UgUXVlcnlEYXRhSXRlbVZhbHVlVHlwZS5UZXh0SW5wdXQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS52YWx1ZS52YWx1ZTtcclxuICAgICAgICAgICAgY2FzZSBRdWVyeURhdGFJdGVtVmFsdWVUeXBlLlRpbWVzcGFuRHJvcGRvd246XHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS52YWx1ZS52YWx1ZSAmJiBPYmplY3Qua2V5cyhpdGVtLnZhbHVlLnZhbHVlKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0udmFsdWUuY3VzdG9tRGlzcGxheUxhYmVsID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS52YWx1ZS5jdXN0b21EaXNwbGF5TGFiZWwgOiB0aGlzLnN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuRm9ybS5EYXRlVGltZVJhbmdlLkN1c3RvbS5sYWJlbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEl0ZW1PcGVyYXRvckRpc3BsYXlWYWx1ZShpdGVtOiBRdWVyeURhdGFJdGVtKSB7XHJcbiAgICAgICAgc3dpdGNoIChpdGVtLnZhbHVlLnR5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSBRdWVyeURhdGFJdGVtVmFsdWVUeXBlLk11bHRpU2VsZWN0RHJvcGRvd246XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5xdWVyeURhdGFPcGVyYW5kLkRyb3Bkb3ducztcclxuICAgICAgICAgICAgY2FzZSBRdWVyeURhdGFJdGVtVmFsdWVUeXBlLlNpbmdsZURyb3Bkb3duOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucXVlcnlEYXRhT3BlcmFuZC5Ecm9wZG93bnM7XHJcbiAgICAgICAgICAgIGNhc2UgUXVlcnlEYXRhSXRlbVZhbHVlVHlwZS5UaW1lc3BhbkRyb3Bkb3duOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucXVlcnlEYXRhT3BlcmFuZC5Ecm9wZG93bnM7XHJcbiAgICAgICAgICAgIGNhc2UgUXVlcnlEYXRhSXRlbVZhbHVlVHlwZS5UZXh0SW5wdXQ6XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5vcGVyYW5kO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldFVuaXF1ZVRhYmxlVmFsdWUoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGF0YVRhYmxlICYmIHRoaXMuZGF0YVRhYmxlLml0ZW1zKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29sdW1uc0Ryb3Bkb3duRGF0YS5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy8gSWdub3JlIGRpc2FibGVkIG9uZXNcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtLnF1ZXJ5RWRpdG9yVHlwZSA9PT0gdGhpcy5xdWVyeURhdGFJdGVtVmFsdWVUeXBlLkRpc2FibGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jb2x1bW5zRHJvcGRvd25EYXRhW2luZGV4XS5vcHRpb25zID0gW107XHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5xdWVyeUVkaXRvclR5cGUgPT09IFF1ZXJ5RGF0YUl0ZW1WYWx1ZVR5cGUuU2luZ2xlRHJvcGRvd24gfHxcclxuICAgICAgICAgICAgICAgICAgICBpdGVtLnF1ZXJ5RWRpdG9yVHlwZSA9PT0gUXVlcnlEYXRhSXRlbVZhbHVlVHlwZS5NdWx0aVNlbGVjdERyb3Bkb3duIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5xdWVyeUVkaXRvclR5cGUgPT09IFF1ZXJ5RGF0YUl0ZW1WYWx1ZVR5cGUuVGltZXNwYW5Ecm9wZG93bikge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIEd1YXJhbnRlZSBpZiB0aGVyZSBhcmUgYWxyZWFkeSBleGlzdGVkIHByZXNldCBvcHRpb25zIGZvciB0aW1lc3BhbiBkcm9wZG93blxyXG4gICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgZGlzcGxheSB0aGUgcHJlc2V0IG9uZXM7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY29sdW1uc0Ryb3Bkb3duRGF0YVtpbmRleF0gJiYgdGhpcy5jb2x1bW5zRHJvcGRvd25EYXRhW2luZGV4XS5wcmVzZXRPcHRpb25zXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICYmIHRoaXMuY29sdW1uc0Ryb3Bkb3duRGF0YVtpbmRleF0ucHJlc2V0T3B0aW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGxvb3AxOlxyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5kYXRhVGFibGUuaXRlbXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5kYXRhVGFibGUuaXRlbXNbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gaXRlbS5maWVsZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXh0ZW5kIHRvIHN1cHBvcnQgbmVzdGVkIGZpZWxkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5lc3RlZFN0cnVjdHVyZSA9IGZpZWxkLnNwbGl0KCcuJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0YXJnZXQgPSByb3c7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbmVzdGVkU3RydWN0dXJlLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3R1cmUgPSBuZXN0ZWRTdHJ1Y3R1cmVbal07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCA9IHRhcmdldFtzdHJ1Y3R1cmVdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZ2dpbmcubG9nKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWw6IExvZ0xldmVsLkVycm9yLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnRXJyb3IgcGFyc2luZyB0aGUgbmVzdGVkOiAnICsgZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlOiAnUXVlcnlFZGl0b3JDb21wb25lbnQuZ2V0VW5pcXVlVGFibGVWYWx1ZSdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBsb29wMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBTdXBwb3J0cyB3aXRoIG9uZSBkYXRhIG1vZGVsIHByb3BlcnR5IGJlaW5nIHVzZWQgYWNyb3NzIGRpZmZlcmVudCBkYXRhdGFibGUgY29sdW1uc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0ICYmICF0aGlzLmNvbHVtbnNEcm9wZG93bkRhdGFbaW5kZXhdLm9wdGlvbnMuaW5jbHVkZXModGFyZ2V0KSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2x1bW5zRHJvcGRvd25EYXRhW2luZGV4XS5vcHRpb25zLnB1c2godGFyZ2V0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgc2V0IGNvbHVtbkxpc3QoY29sdW1uTGlzdDogUXVlcnlMaXN0PERhdGFUYWJsZUNvbHVtbkNvbXBvbmVudD4pIHtcclxuICAgICAgICBpZiAoY29sdW1uTGlzdCkge1xyXG4gICAgICAgICAgICAvLyBJZiBjb2x1bW4gYXBwbGllZCBRdWVyeURhdGFJdGVtVmFsdWVUeXBlLkRpc2FibGVkIHdpbGwgbm90IGJlIGFibGUgdG8gZmlsdGVyIHdpdGhcclxuICAgICAgICAgICAgdGhpcy5pbnRlcm5hbENvbHVtbkxpc3QgPSB0aGlzLmNvbHVtbkxpc3RDb25zdHJ1Y3Rvcihjb2x1bW5MaXN0LnRvQXJyYXkoKSk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmludGVybmFsQ29sdW1uTGlzdCkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHNob3VsZEVuYWJsZUdldERhdGFUYWJsZVVuaXF1ZVZhbHVlcyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmludGVybmFsQ29sdW1uTGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHR5cGUgPSB0aGlzLmludGVybmFsQ29sdW1uTGlzdFtpXS5xdWVyeUVkaXRvclR5cGU7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09IFF1ZXJ5RGF0YUl0ZW1WYWx1ZVR5cGUuU2luZ2xlRHJvcGRvd25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHR5cGUgPT09IFF1ZXJ5RGF0YUl0ZW1WYWx1ZVR5cGUuTXVsdGlTZWxlY3REcm9wZG93blxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgdHlwZSA9PT0gUXVlcnlEYXRhSXRlbVZhbHVlVHlwZS5UaW1lc3BhbkRyb3Bkb3duKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXQ6IFF1ZXJ5RWRpdG9yQ29sdW1uRHJvcGRvd25EYXRhID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiB0aGlzLmludGVybmFsQ29sdW1uTGlzdFtpXS52YWx1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0Ryb3Bkb3duOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5RWRpdG9yVHlwZTogdHlwZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSBRdWVyeURhdGFJdGVtVmFsdWVUeXBlLlRpbWVzcGFuRHJvcGRvd24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBmb3Igbm93IG9ubHkgYWxsb3cgdXNlciB0byB1c2UgcHJlc2V0IGFuZCBjdXN0b20gZGF0ZXBpY2tlcnNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMYXRlciBvbiBjYW4gdXBncmFkZSB0byBzdXBwb3J0IHVzaW5nIHVuaXF1ZSB0aW1lc3RhbXBzIGZyb20gdGhlIGRhdGF0YWJsZSBjb2x1bW5zXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LnByZXNldE9wdGlvbnMgPSB0aGlzLmludGVybmFsQ29sdW1uTGlzdFtpXS5wcmVzZXRPcHRpb25zO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2x1bW5zRHJvcGRvd25EYXRhLnB1c2godGFyZ2V0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2hvdWxkRW5hYmxlR2V0RGF0YVRhYmxlVW5pcXVlVmFsdWVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkRW5hYmxlR2V0RGF0YVRhYmxlVW5pcXVlVmFsdWVzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBRdWVyeURhdGFJdGVtVmFsdWVUeXBlLlRleHRJbnB1dCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2x1bW5zRHJvcGRvd25EYXRhLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiB0aGlzLmludGVybmFsQ29sdW1uTGlzdFtpXS52YWx1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0Ryb3Bkb3duOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeUVkaXRvclR5cGU6IHR5cGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFF1ZXJ5RGF0YUl0ZW1WYWx1ZVR5cGUuRGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZEVuYWJsZUdldERhdGFUYWJsZVVuaXF1ZVZhbHVlcyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChzaG91bGRFbmFibGVHZXREYXRhVGFibGVVbmlxdWVWYWx1ZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVuYWJsZUdldERhdGFUYWJsZVVuaXF1ZVZhbHVlcyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5nZXRVbmlxdWVUYWJsZVZhbHVlKCk7XHJcbiAgICAgICAgICAgIHRoaXMucmVzZXRRdWVyeUVkaXRvcigpO1xyXG4gICAgICAgICAgICB0aGlzLmFwcGx5VG1wVGV4dFZhbHVlVG9WYWx1ZSgpO1xyXG4gICAgICAgICAgICB0aGlzLnF1ZXJ5RWRpdG9yID0gdGhpcy52YWxpZGF0ZVF1ZXJ5RWRpdG9yKCk7XHJcbiAgICAgICAgICAgIHRoaXMuYXBwbHlRdWVyeUVkaXRvclRvRGF0YXRhYmxlKCk7XHJcbiAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIEBEZWJvdW5jZSgpXHJcbiAgICBwdWJsaWMgb25RdWVyeUVkaXRvckNoYW5nZShpbmRleDogbnVtYmVyLCBpc0NvbHVtblVwZGF0ZT86IGJvb2xlYW4sIG5lZWRzVXBkYXRlSXNWYWxpZD86IGJvb2xlYW4sIGlzT3BlcmF0b3JVcGRhdGU/OiBib29sZWFuKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGF0YVRhYmxlKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnF1ZXJ5RWRpdG9yICYmIHRoaXMucXVlcnlFZGl0b3IuY29udGVudHMgJiYgdGhpcy5xdWVyeUVkaXRvci5jb250ZW50cy5sZW5ndGhcclxuICAgICAgICAgICAgICAgICYmIHRoaXMucXVlcnlFZGl0b3IuY29udGVudHNbaW5kZXhdXHJcbiAgICAgICAgICAgICAgICAmJiAhTXNmdFNtZS5pc051bGxPcldoaXRlU3BhY2UodGhpcy5xdWVyeUVkaXRvci5jb250ZW50c1tpbmRleF0uY29sdW1uLnZhbHVlKSkge1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtbnNEcm9wZG93bkRhdGFJdGVtID0gdGhpcy5jb2x1bW5zRHJvcGRvd25EYXRhLmZpbmQoKGkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaS5maWVsZCA9PT0gdGhpcy5zZWxlY3RlZEl0ZW0uY29sdW1uLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKG5lZWRzVXBkYXRlSXNWYWxpZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkSXRlbS52YWx1ZS5pc1ZhbHVlVW5zZXQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0udmFsdWUuaXNWYWx1ZVVuc2V0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmFwcGx5TW9kZSA9PT0gQXBwbHlNb2RlLkFjdGl2ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFVuc2V0UHJvcGVydHkoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRFZGl0aW5nSXRlbVZhbGlkUHJvcGVydHkoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHBseVRtcFRleHRWYWx1ZVRvVmFsdWUodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHF1ZXJ5RWRpdG9yID0gdGhpcy52YWxpZGF0ZVF1ZXJ5RWRpdG9yKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXBwbHlRdWVyeUVkaXRvclRvRGF0YXRhYmxlKHF1ZXJ5RWRpdG9yKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlUXVlcnlFZGl0b3JMYWJlbCh0aGlzLnNlbGVjdGVkSXRlbSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29sdW1uc0Ryb3Bkb3duRGF0YUl0ZW0ucXVlcnlFZGl0b3JUeXBlID09PSBRdWVyeURhdGFJdGVtVmFsdWVUeXBlLlNpbmdsZURyb3Bkb3duIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uc0Ryb3Bkb3duRGF0YUl0ZW0ucXVlcnlFZGl0b3JUeXBlID09PSBRdWVyeURhdGFJdGVtVmFsdWVUeXBlLk11bHRpU2VsZWN0RHJvcGRvd24pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbS52YWx1ZS50eXBlID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uc0Ryb3Bkb3duRGF0YUl0ZW0ucXVlcnlFZGl0b3JUeXBlID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbnNEcm9wZG93bkRhdGFJdGVtLnF1ZXJ5RWRpdG9yVHlwZSA6IFF1ZXJ5RGF0YUl0ZW1WYWx1ZVR5cGUuU2luZ2xlRHJvcGRvd247XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5lbmFibGVHZXREYXRhVGFibGVVbmlxdWVWYWx1ZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmFibGVHZXREYXRhVGFibGVVbmlxdWVWYWx1ZXMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNDb2x1bW5VcGRhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0NvbHVtbkRyb3Bkb3duQnVzeSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uRHJvcGRvd25GaWVsZCA9IGNvbHVtbnNEcm9wZG93bkRhdGFJdGVtLmZpZWxkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbS5vcGVyYW5kID0gUXVlcnlEYXRhT3BlcmFuZC5FcTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbHVtbnNEcm9wZG93bkRhdGFJdGVtLnF1ZXJ5RWRpdG9yVHlwZSA9PT0gUXVlcnlEYXRhSXRlbVZhbHVlVHlwZS5TaW5nbGVEcm9wZG93bikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTZWxlY3RlZEl0ZW1WYWx1ZSh0aGlzLnNlbGVjdGVkSXRlbSwgJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0udmFsdWUuc2VhcmNoYWJsZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29sdW1uc0Ryb3Bkb3duRGF0YUl0ZW0ucXVlcnlFZGl0b3JUeXBlID09PSBRdWVyeURhdGFJdGVtVmFsdWVUeXBlLk11bHRpU2VsZWN0RHJvcGRvd24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRJdGVtVmFsdWUodGhpcy5zZWxlY3RlZEl0ZW0sIFtdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtLnZhbHVlLnNlYXJjaGFibGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0udmFsdWUuc2VhcmNoYWJsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbHVtbkRyb3Bkb3duRGF0YShjb2x1bW5zRHJvcGRvd25EYXRhSXRlbS5maWVsZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb2x1bW5zRHJvcGRvd25EYXRhSXRlbS5xdWVyeUVkaXRvclR5cGUgPT09IFF1ZXJ5RGF0YUl0ZW1WYWx1ZVR5cGUuVGV4dElucHV0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0udmFsdWUudHlwZSA9IFF1ZXJ5RGF0YUl0ZW1WYWx1ZVR5cGUuVGV4dElucHV0O1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb2x1bW5zRHJvcGRvd25EYXRhSXRlbS5xdWVyeUVkaXRvclR5cGUgPT09IFF1ZXJ5RGF0YUl0ZW1WYWx1ZVR5cGUuVGltZXNwYW5Ecm9wZG93bikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtLnZhbHVlLnR5cGUgPSBRdWVyeURhdGFJdGVtVmFsdWVUeXBlLlRpbWVzcGFuRHJvcGRvd247XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzQ29sdW1uVXBkYXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtLm9wZXJhbmQgPSBRdWVyeURhdGFPcGVyYW5kLkVxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFNlbGVjdGVkSXRlbVZhbHVlKHRoaXMuc2VsZWN0ZWRJdGVtLCBuZXcgRGF0ZVJhbmdlKCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbS52YWx1ZS5zZWFyY2hhYmxlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQ29sdW1uRHJvcGRvd25EYXRhKGNvbHVtbnNEcm9wZG93bkRhdGFJdGVtLmZpZWxkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0udmFsdWUuY3VzdG9tRGlzcGxheUxhYmVsID0gdGhpcy5zdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkZvcm0uRGF0ZVRpbWVSYW5nZS5DdXN0b20ubGFiZWw7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChpc09wZXJhdG9yVXBkYXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRJdGVtLnZhbHVlLnR5cGUgPT09IFF1ZXJ5RGF0YUl0ZW1WYWx1ZVR5cGUuVGV4dElucHV0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmFwcGx5TW9kZSA9PT0gQXBwbHlNb2RlLkFjdGl2ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRVbnNldFByb3BlcnR5KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEVkaXRpbmdJdGVtVmFsaWRQcm9wZXJ0eSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHBseVRtcFRleHRWYWx1ZVRvVmFsdWUodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBxdWVyeUVkaXRvciA9IHRoaXMudmFsaWRhdGVRdWVyeUVkaXRvcigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHBseVF1ZXJ5RWRpdG9yVG9EYXRhdGFibGUocXVlcnlFZGl0b3IpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb2x1bW5zRHJvcGRvd25EYXRhSXRlbS5xdWVyeUVkaXRvclR5cGUgPT09IFF1ZXJ5RGF0YUl0ZW1WYWx1ZVR5cGUuU2luZ2xlRHJvcGRvd24gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uc0Ryb3Bkb3duRGF0YUl0ZW0ucXVlcnlFZGl0b3JUeXBlID09PSBRdWVyeURhdGFJdGVtVmFsdWVUeXBlLk11bHRpU2VsZWN0RHJvcGRvd24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0ub3BlcmFuZCA9IFF1ZXJ5RGF0YU9wZXJhbmQuRXE7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBTZXQgZGlzYWJsZVJlc2V0QnV0dG9uIHZhbHVlXHJcbiAgICAgICAgdGhpcy5zZXREaXNhYmxlUmVzZXRCdXR0b24oKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVwZGF0ZUNvbHVtbkRyb3Bkb3duRGF0YShmaWVsZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY29sdW1uc0Ryb3Bkb3duRGF0YSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy5jb2x1bW5zRHJvcGRvd25EYXRhLmZpbHRlcigoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLmZpZWxkID09PSBmaWVsZDtcclxuICAgICAgICAgICAgICAgIH0pWzBdO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRhcmdldCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0YXJnZXQucHJlc2V0T3B0aW9ucyAmJiB0YXJnZXQucHJlc2V0T3B0aW9ucy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2x1bW5Ecm9wZG93bkRhdGEgPSB0YXJnZXQucHJlc2V0T3B0aW9ucztcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRhcmdldC5vcHRpb25zICYmIHRhcmdldC5vcHRpb25zLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbHVtbkRyb3Bkb3duRGF0YSA9IHRhcmdldC5vcHRpb25zO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uRHJvcGRvd25EYXRhID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbHVtbkRyb3Bkb3duRGF0YSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0NvbHVtbkRyb3Bkb3duQnVzeSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgcmVqZWN0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5pc0NvbHVtbkRyb3Bkb3duQnVzeSA9IGZhbHNlO1xyXG4gICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgQEhvc3RMaXN0ZW5lcignbW91c2V1cCcpXHJcbiAgICBtb3VzZXVwSW5zaWRlKCkge1xyXG4gICAgICAgIHRoaXMuaXNGb2N1c0luc2lkZUNvbXBvbmVudCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5pc0NvbXBvbmVudENsaWNrZWQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50Om1vdXNldXAnKVxyXG4gICAgbW91c2V1cE91dCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuaXNGb2N1c0luc2lkZUNvbXBvbmVudCAmJiB0aGlzLmlzQ29tcG9uZW50Q2xpY2tlZCkge1xyXG4gICAgICAgICAgICB0aGlzLmFwcGx5V29ya2Zsb3coKTtcclxuICAgICAgICAgICAgdGhpcy5pc0NvbXBvbmVudENsaWNrZWQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pc0ZvY3VzSW5zaWRlQ29tcG9uZW50ID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgQERlYm91bmNlKClcclxuICAgIHB1YmxpYyBvblZhbHVlRmllbGRFbnRlcktleWRvd24oJGV2ZW50LCBpbmRleCk6IHZvaWQge1xyXG4gICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGlmICh0aGlzLnF1ZXJ5RWRpdG9yLmNvbnRlbnRzICYmIHRoaXMucXVlcnlFZGl0b3IuY29udGVudHNbaW5kZXhdKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnF1ZXJ5RWRpdG9yLmNvbnRlbnRzW2luZGV4XS5pc0VkaXRpbmcpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXBwbHlXb3JrZmxvdygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mb2N1c09uU2VsZWN0ZWRIdG1sKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgQERlYm91bmNlKClcclxuICAgIHByaXZhdGUgZm9jdXNPblNlbGVjdGVkSHRtbCgpIHtcclxuICAgICAgICBsZXQgc2VsZWN0RnJvbUFkZEJ1dHRvbiA9IGZhbHNlO1xyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkSHRtbC5jbGFzc0xpc3QgJiYgdGhpcy5zZWxlY3RlZEh0bWwuY2xhc3NOYW1lLmluY2x1ZGVzKCdzbWUtcXVlcnktZWRpdG9yLW5ldy1pdGVtJykpIHtcclxuICAgICAgICAgICAgc2VsZWN0RnJvbUFkZEJ1dHRvbiA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZm9jdXNPblNlbGVjdGVkSHRtbEhlbHBlcihzZWxlY3RGcm9tQWRkQnV0dG9uKTtcclxuICAgIH1cclxuXHJcbiAgICBAWWllbGQoKVxyXG4gICAgcHJpdmF0ZSBmb2N1c09uU2VsZWN0ZWRIdG1sSGVscGVyKHNlbGVjdEZyb21BZGRCdXR0b246IGJvb2xlYW4pIHtcclxuICAgICAgICBpZiAoc2VsZWN0RnJvbUFkZEJ1dHRvbikge1xyXG4gICAgICAgICAgICBjb25zdCBkID0gRG9tO1xyXG4gICAgICAgICAgICBjb25zdCB0bXBTZWxlY3RlZEl0ZW0gPSBkLmdldFByZXZpb3VzRm9jdXNhYmxlRWxlbWVudCh0aGlzLnNlbGVjdGVkSHRtbCk7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRIdG1sID0gdG1wU2VsZWN0ZWRJdGVtO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEh0bWwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRIdG1sLmZvY3VzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEh0bWwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRIdG1sLmZvY3VzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uUGlsbEVudGVyVHJhcCgkZXZlbnQsIGl0ZW06IFF1ZXJ5RGF0YUl0ZW0sIGluZGV4OiBudW1iZXIpIHtcclxuICAgICAgICBpZiAoISgkZXZlbnQudGFyZ2V0ICYmICRldmVudC50YXJnZXQgJiYgJGV2ZW50LnRhcmdldC50eXBlICYmICRldmVudC50YXJnZXQudHlwZS50b0xvd2VyQ2FzZSgpID09PSAnYnV0dG9uJykpIHtcclxuICAgICAgICAgICAgdGhpcy5vblBpbGxDbGljayhpdGVtLCBpbmRleCk7XHJcbiAgICAgICAgICAgIHRoaXMuZm9jdXNPbkVsZW1lbnRJblRyYXAoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pc0ZvY3VzSW5zaWRlQ29tcG9uZW50ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmlzQ29tcG9uZW50Q2xpY2tlZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgQFlpZWxkKClcclxuICAgIHByaXZhdGUgZm9jdXNPbkVsZW1lbnRJblRyYXAoKSB7XHJcbiAgICAgICAgY29uc3QgbmV4dEZvY3VzYWJsZUVsZW1lbnRJblRyYXAgPSBEb20uZ2V0TmV4dEZvY3VzYWJsZUVsZW1lbnRJblRyYXAodGhpcy5zZWxlY3RlZEh0bWwpO1xyXG4gICAgICAgIGlmIChuZXh0Rm9jdXNhYmxlRWxlbWVudEluVHJhcCkge1xyXG4gICAgICAgICAgICBuZXh0Rm9jdXNhYmxlRWxlbWVudEluVHJhcC5mb2N1cygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBARGVib3VuY2UoKVxyXG4gICAgcHVibGljIG9uUGlsbEV4aXRUcmFwKCRldmVudCkge1xyXG4gICAgICAgIGlmICghKCRldmVudC5rZXlDb2RlID09PSAxMyAmJiAkZXZlbnQudGFyZ2V0ICYmICRldmVudC50YXJnZXQudHlwZS50b0xvd2VyQ2FzZSgpID09PSAnYnV0dG9uJykpIHtcclxuICAgICAgICAgICAgdGhpcy5hcHBseVdvcmtmbG93KCk7XHJcbiAgICAgICAgICAgIHRoaXMuZm9jdXNPblNlbGVjdGVkSHRtbCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlzRm9jdXNJbnNpZGVDb21wb25lbnQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzQ29tcG9uZW50Q2xpY2tlZCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvblBpbGxDbGljayhpdGVtOiBRdWVyeURhdGFJdGVtLCBpbmRleDogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNFZGl0aW5nKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXBwbHlXb3JrZmxvdygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbSA9IHRoaXMucXVlcnlFZGl0b3IuY29udGVudHNbaW5kZXhdO1xyXG4gICAgICAgIGlmICghaXRlbS5kaXNhYmxlZCkge1xyXG4gICAgICAgICAgICBpZiAoaXRlbS52YWx1ZS50eXBlICE9PSBRdWVyeURhdGFJdGVtVmFsdWVUeXBlLlRleHRJbnB1dCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVDb2x1bW5Ecm9wZG93bkRhdGEoaXRlbS5jb2x1bW4udmFsdWUpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0SXNFZGl0aW5nKGl0ZW0sIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudE1vZGlmeWluZ0luZGV4ID0gaW5kZXg7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0SXNFZGl0aW5nKGl0ZW0sIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50TW9kaWZ5aW5nSW5kZXggPSBpbmRleDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXBwbHlUbXBUZXh0VmFsdWVUb1ZhbHVlKGRvTm90U2V0VGVtcG9yYXJ5VG9GYWxzZT86IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5kYXRhVGFibGUpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMucXVlcnlFZGl0b3IgJiYgdGhpcy5xdWVyeUVkaXRvci5jb250ZW50cyAmJiB0aGlzLnF1ZXJ5RWRpdG9yLmNvbnRlbnRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVRdWVyeUVkaXRvckxhYmVsKHRoaXMuc2VsZWN0ZWRJdGVtKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLnNlbGVjdGVkSXRlbTtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTZWxlY3RlZEl0ZW1WYWx1ZShpdGVtLCBpdGVtLnZhbHVlLnRlbXBvcmFyeVZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWRvTm90U2V0VGVtcG9yYXJ5VG9GYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldElzRWRpdGluZyh0aGlzLnNlbGVjdGVkSXRlbSwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFwcGx5V29ya2Zsb3coKSB7XHJcbiAgICAgICAgdGhpcy5zZXRVbnNldFByb3BlcnR5KCk7XHJcbiAgICAgICAgdGhpcy5zZXRFZGl0aW5nSXRlbVZhbGlkUHJvcGVydHkoKTtcclxuICAgICAgICB0aGlzLmZpbHRlclVuc2V0VmFsdWVJdGVtQW5kU2V0SW52YWxpZCgpO1xyXG4gICAgICAgIHRoaXMuYXBwbHlUbXBUZXh0VmFsdWVUb1ZhbHVlKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuYXBwbHlNb2RlID09PSBBcHBseU1vZGUuTGF6eSkge1xyXG4gICAgICAgICAgICBjb25zdCBxdWVyeUVkaXRvciA9IHRoaXMudmFsaWRhdGVRdWVyeUVkaXRvcigpO1xyXG4gICAgICAgICAgICB0aGlzLmFwcGx5UXVlcnlFZGl0b3JUb0RhdGF0YWJsZShxdWVyeUVkaXRvcik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdmFsaWRhdGVRdWVyeUVkaXRvcihpbmRleD86IG51bWJlcikge1xyXG4gICAgICAgIGNvbnN0IHJlcyA9IHtcclxuICAgICAgICAgICAgY29udGVudHM6IG5ldyBBcnJheTxRdWVyeURhdGFJdGVtPigpXHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAodGhpcy5xdWVyeUVkaXRvci5jb250ZW50cyAmJiB0aGlzLnF1ZXJ5RWRpdG9yLmNvbnRlbnRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuc2VsZWN0ZWRJdGVtO1xyXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIU1zZnRTbWUuaXNOdWxsT3JXaGl0ZVNwYWNlKGl0ZW0uY29sdW1uLnZhbHVlKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAhKHR5cGVvZiBpdGVtLnZhbHVlLnZhbHVlID09PSAnc3RyaW5nJyAmJiBNc2Z0U21lLmlzTnVsbE9yV2hpdGVTcGFjZShpdGVtLnZhbHVlLnZhbHVlKSkgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgISh0eXBlb2YgaXRlbS52YWx1ZS52YWx1ZSA9PT0gJ29iamVjdCcgJiYgIWl0ZW0udmFsdWUudmFsdWUubGVuZ3RoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXMuY29udGVudHMucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtLnZhbHVlLmlzVmFsdWVVbnNldCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5xdWVyeUVkaXRvci5jb250ZW50cy5mb3JFYWNoKChpdGVtOiBRdWVyeURhdGFJdGVtKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFNc2Z0U21lLmlzTnVsbE9yV2hpdGVTcGFjZShpdGVtLmNvbHVtbi52YWx1ZSkgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgISh0eXBlb2YgaXRlbS52YWx1ZS52YWx1ZSA9PT0gJ3N0cmluZycgJiYgTXNmdFNtZS5pc051bGxPcldoaXRlU3BhY2UoaXRlbS52YWx1ZS52YWx1ZSkpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICEodHlwZW9mIGl0ZW0udmFsdWUudmFsdWUgPT09ICdvYmplY3QnICYmICFpdGVtLnZhbHVlLnZhbHVlLmxlbmd0aCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzLmNvbnRlbnRzLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS52YWx1ZS5pc1ZhbHVlVW5zZXQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXM7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFwcGx5UXVlcnlFZGl0b3JUb0RhdGF0YWJsZShpbnB1dD86IFF1ZXJ5RGF0YSkge1xyXG4gICAgICAgIGlmICh0aGlzLmRhdGFUYWJsZSkge1xyXG4gICAgICAgICAgICB0aGlzLmRhdGFUYWJsZS5hcHBseVF1ZXJ5RWRpdG9yKGlucHV0ID8gaW5wdXQgOiB0aGlzLnF1ZXJ5RWRpdG9yKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG5ld1F1ZXJ5RWRpdG9yKCRldmVudCwgaXNLZXlFbnRlclByZXNzZWQ/OiBib29sZWFuKSB7XHJcbiAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgdGhpcy5pc0NvbXBvbmVudENsaWNrZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzRm9jdXNJbnNpZGVDb21wb25lbnQgPSBmYWxzZTtcclxuICAgICAgICBpZiAodGhpcy5pc0VkaXRpbmcpIHtcclxuICAgICAgICAgICAgdGhpcy5hcHBseVdvcmtmbG93KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucXVlcnlFZGl0b3IuY29udGVudHMucHVzaCh0aGlzLm5ld1F1ZXJ5RWRpdG9ySGVscGVyKCcnLCAnJykpO1xyXG4gICAgICAgIHRoaXMuaXNFZGl0aW5nID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbSA9IHRoaXMucXVlcnlFZGl0b3IuY29udGVudHNbdGhpcy5xdWVyeUVkaXRvci5jb250ZW50cy5sZW5ndGggLSAxXTtcclxuXHJcbiAgICAgICAgaWYgKGlzS2V5RW50ZXJQcmVzc2VkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRIdG1sID0gPEhUTUxFbGVtZW50PmV2ZW50LnRhcmdldDtcclxuICAgICAgICAgICAgdGhpcy5mb2N1c09uTmV3UXVlcnlQaWxsKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBTZXQgZGlzYWJsZVJlc2V0QnV0dG9uIHZhbHVlXHJcbiAgICAgICAgdGhpcy5zZXREaXNhYmxlUmVzZXRCdXR0b24oKTtcclxuICAgIH1cclxuXHJcbiAgICBAWWllbGQoKVxyXG4gICAgcHJpdmF0ZSBmb2N1c09uTmV3UXVlcnlQaWxsKCkge1xyXG4gICAgICAgIGNvbnN0IGQgPSBEb207XHJcbiAgICAgICAgY29uc3QgbGFzdEZvY3VzYWJsZVBpbGxSZW1vdmVCdXR0b24gPSBkLmdldFByZXZpb3VzRm9jdXNhYmxlRWxlbWVudCh0aGlzLnNlbGVjdGVkSHRtbCk7XHJcbiAgICAgICAgaWYgKGxhc3RGb2N1c2FibGVQaWxsUmVtb3ZlQnV0dG9uKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGxhc3RGb2N1c2FibGVQaWxsS2V5RHJvcGRvd24gPSBkLmdldFByZXZpb3VzRm9jdXNhYmxlRWxlbWVudEluVHJhcChsYXN0Rm9jdXNhYmxlUGlsbFJlbW92ZUJ1dHRvbik7XHJcbiAgICAgICAgICAgIGlmIChsYXN0Rm9jdXNhYmxlUGlsbEtleURyb3Bkb3duKSB7XHJcbiAgICAgICAgICAgICAgICBsYXN0Rm9jdXNhYmxlUGlsbEtleURyb3Bkb3duLmZvY3VzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldE1lbnVJdGVtTGFiZWwoaW5kZXg6IG51bWJlcikge1xyXG4gICAgICAgIHJldHVybiBbdGhpcy5pZEJhZy5waWxsTGFiZWwsIHRoaXMuaWRCYWcuZGlzYWJsZWRMYWJlbCwgdGhpcy5pZEJhZy5pcnJlbW92YWJsZUxhYmVsLCB0aGlzLmlkQmFnLnJlbW92YWJsZUxhYmVsXVxyXG4gICAgICAgICAgICAubWFwKGwgPT4gYCR7bH0ke2luZGV4fWApXHJcbiAgICAgICAgICAgIC5qb2luKCcgJyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGNyZWF0ZUlkQmFnKCk6IE1zZnRTbWUuU3RyaW5nTWFwPHN0cmluZz4ge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHBpbGxMYWJlbDogJycsXHJcbiAgICAgICAgICAgIGRpc2FibGVkTGFiZWw6ICcnLFxyXG4gICAgICAgICAgICBpcnJlbW92YWJsZUxhYmVsOiAnJyxcclxuICAgICAgICAgICAgcmVtb3ZhYmxlTGFiZWw6ICcnXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNldFVuc2V0UHJvcGVydHkoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNFZGl0aW5nICYmIHRoaXMucXVlcnlFZGl0b3IuY29udGVudHMgJiYgdGhpcy5xdWVyeUVkaXRvci5jb250ZW50cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuc2VsZWN0ZWRJdGVtO1xyXG4gICAgICAgICAgICBpZiAoKCFpdGVtLmNvbHVtbi52YWx1ZSB8fCBNc2Z0U21lLmlzTnVsbE9yV2hpdGVTcGFjZShpdGVtLmNvbHVtbi52YWx1ZSkgfHxcclxuICAgICAgICAgICAgICAgICFpdGVtLnZhbHVlLnRlbXBvcmFyeVZhbHVlIHx8IE1zZnRTbWUuaXNOdWxsT3JXaGl0ZVNwYWNlKGl0ZW0udmFsdWUudGVtcG9yYXJ5VmFsdWUpKSkge1xyXG4gICAgICAgICAgICAgICAgaXRlbS52YWx1ZS5pc1ZhbHVlVW5zZXQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaXRlbS52YWx1ZS5pc1ZhbHVlVW5zZXQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlUXVlcnlFZGl0b3JMYWJlbChpdGVtKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0U2VsZWN0ZWRIdG1sKCkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRIdG1sID0gPEhUTUxFbGVtZW50PmV2ZW50LnRhcmdldDtcclxuICAgICAgICBjb25zdCBkID0gRG9tO1xyXG4gICAgICAgIHRoaXMucG9zdFNlbGVjdGVkSHRtbCA9IGQuZ2V0TmV4dEZvY3VzYWJsZUVsZW1lbnQodGhpcy5zZWxlY3RlZEh0bWwpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2V0RWRpdGluZ0l0ZW1WYWxpZFByb3BlcnR5KCkge1xyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkSXRlbSAmJiAodGhpcy5pc0VkaXRpbmcgJiYgdGhpcy5hcHBseU1vZGUgPT09IEFwcGx5TW9kZS5BY3RpdmUpKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkSXRlbS52YWx1ZS5pc1ZhbHVlVW5zZXQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtLmludmFsaWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRJdGVtLnZhbHVlLnR5cGUgPT09IFF1ZXJ5RGF0YUl0ZW1WYWx1ZVR5cGUuVGV4dElucHV0IHx8XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0udmFsdWUudHlwZSA9PT0gUXVlcnlEYXRhSXRlbVZhbHVlVHlwZS5TaW5nbGVEcm9wZG93bikge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBpc0VtcHR5VmFsdWUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRJdGVtLnZhbHVlLnRlbXBvcmFyeVZhbHVlIHx8ICF0aGlzLnNlbGVjdGVkSXRlbS52YWx1ZS50ZW1wb3JhcnlWYWx1ZS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXNFbXB0eVZhbHVlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzRW1wdHlWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbS5pbnZhbGlkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbS5pbnZhbGlkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkSXRlbS52YWx1ZS50eXBlID09PSBRdWVyeURhdGFJdGVtVmFsdWVUeXBlLk11bHRpU2VsZWN0RHJvcGRvd24pIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRJdGVtLnZhbHVlLnRlbXBvcmFyeVZhbHVlIHx8ICF0aGlzLnNlbGVjdGVkSXRlbS52YWx1ZS50ZW1wb3JhcnlWYWx1ZS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0uaW52YWxpZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0uaW52YWxpZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZEl0ZW0udmFsdWUudHlwZSA9PT0gUXVlcnlEYXRhSXRlbVZhbHVlVHlwZS5UaW1lc3BhbkRyb3Bkb3duKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkSXRlbS52YWx1ZS50ZW1wb3JhcnlWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbS5pbnZhbGlkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbS5pbnZhbGlkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZmlsdGVyVW5zZXRWYWx1ZUl0ZW1BbmRTZXRJbnZhbGlkKCkge1xyXG4gICAgICAgIHRoaXMucXVlcnlFZGl0b3IuY29udGVudHMgPSB0aGlzLnF1ZXJ5RWRpdG9yLmNvbnRlbnRzLmZpbHRlcigoaXRlbTogUXVlcnlEYXRhSXRlbSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gIShpdGVtLmludmFsaWQgJiYgaXRlbS52YWx1ZS5pc1ZhbHVlVW5zZXQpIHx8IGl0ZW0uaXJyZW1vdmFibGU7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlbW92ZVF1ZXJ5RWRpdG9ySXRlbSgkZXZlbnQsIGluZGV4LCBpc0Zyb21LZXlib2FyZFByZXNzPzogYm9vbGVhbikge1xyXG4gICAgICAgIGlmICgkZXZlbnQpIHtcclxuICAgICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG5leHRGb2N1c2FibGVQaWxsID0gdGhpcy5maW5kTmV4dEZvY3VzYWJsZVBpbGwoaW5kZXgpO1xyXG4gICAgICAgIGlmICh0aGlzLnF1ZXJ5RWRpdG9yICYmIHRoaXMucXVlcnlFZGl0b3IuY29udGVudHMgJiYgdGhpcy5xdWVyeUVkaXRvci5jb250ZW50c1tpbmRleF0gJiZcclxuICAgICAgICAgICAgIXRoaXMucXVlcnlFZGl0b3IuY29udGVudHNbaW5kZXhdLmlycmVtb3ZhYmxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucXVlcnlFZGl0b3IuY29udGVudHMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgY29uc3QgcXVlcnlFZGl0b3IgPSB0aGlzLnZhbGlkYXRlUXVlcnlFZGl0b3IoKTtcclxuICAgICAgICAgICAgdGhpcy5hcHBseVF1ZXJ5RWRpdG9yVG9EYXRhdGFibGUocXVlcnlFZGl0b3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmZvY3VzT25UaGVOZXh0UGlsbEFmdGVyUmVtb3ZlKGluZGV4LCBpc0Zyb21LZXlib2FyZFByZXNzLCBuZXh0Rm9jdXNhYmxlUGlsbCk7XHJcblxyXG4gICAgICAgIC8vIFNldCBkaXNhYmxlUmVzZXRCdXR0b24gdmFsdWVcclxuICAgICAgICB0aGlzLnNldERpc2FibGVSZXNldEJ1dHRvbigpO1xyXG4gICAgfVxyXG5cclxuICAgIEBZaWVsZCgpXHJcbiAgICBwcml2YXRlIGZvY3VzT25UaGVOZXh0UGlsbEFmdGVyUmVtb3ZlKGluZGV4OiBudW1iZXIsIGlzRnJvbUtleWJvYXJkUHJlc3M6IGJvb2xlYW4sIG5leHRGb2N1c2FibGVQaWxsOiBIVE1MRWxlbWVudCkge1xyXG4gICAgICAgIGlmICghdGhpcy5zZWxlY3RlZEl0ZW0pIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0gPSB0aGlzLnF1ZXJ5RWRpdG9yLmNvbnRlbnRzW2luZGV4XTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlzRnJvbUtleWJvYXJkUHJlc3MgJiYgbmV4dEZvY3VzYWJsZVBpbGwgJiYgIXRoaXMuc2VsZWN0ZWRJdGVtLmlycmVtb3ZhYmxlKSB7XHJcbiAgICAgICAgICAgIG5leHRGb2N1c2FibGVQaWxsLmZvY3VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZmluZE5leHRGb2N1c2FibGVQaWxsKGluZGV4KSB7XHJcbiAgICAgICAgY29uc3QgcXVlcnlFZGl0b3JMZW5ndGggPSB0aGlzLnF1ZXJ5RWRpdG9yICYmIHRoaXMucXVlcnlFZGl0b3IuY29udGVudHNcclxuICAgICAgICAgICAgPyB0aGlzLnF1ZXJ5RWRpdG9yLmNvbnRlbnRzLmxlbmd0aCA6IDA7XHJcbiAgICAgICAgY29uc3QgZCA9IERvbTtcclxuICAgICAgICBsZXQgcG9zdEZvY3VzYWJsZUVsZW1lbnQsIHByZUZvY3VzYWJsZUVsZW1lbnQ7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNFZGl0aW5nKSB7XHJcbiAgICAgICAgICAgIHBvc3RGb2N1c2FibGVFbGVtZW50ID0gdGhpcy5wb3N0U2VsZWN0ZWRIdG1sO1xyXG4gICAgICAgICAgICBpZiAocG9zdEZvY3VzYWJsZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgIHByZUZvY3VzYWJsZUVsZW1lbnQgPSBkLmdldFByZXZpb3VzRm9jdXNhYmxlRWxlbWVudCh0aGlzLnNlbGVjdGVkSHRtbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBwb3N0Rm9jdXNhYmxlRWxlbWVudCA9IGQuZ2V0TmV4dEZvY3VzYWJsZUVsZW1lbnQodGhpcy5zZWxlY3RlZEh0bWwpO1xyXG4gICAgICAgICAgICBwcmVGb2N1c2FibGVFbGVtZW50ID0gZC5nZXRQcmV2aW91c0ZvY3VzYWJsZUVsZW1lbnQodGhpcy5zZWxlY3RlZEh0bWwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXF1ZXJ5RWRpdG9yTGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH0gZWxzZSBpZiAocXVlcnlFZGl0b3JMZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHBvc3RGb2N1c2FibGVFbGVtZW50O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gcXVlcnlFZGl0b3JMZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJlRm9jdXNhYmxlRWxlbWVudDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBwb3N0Rm9jdXNhYmxlRWxlbWVudDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVzZXRRdWVyeUVkaXRvcigpIHtcclxuICAgICAgICBpZiAoIXRoaXMucXVlcnlFZGl0b3IpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLnByZXNldFF1ZXJ5RWRpdG9yIHx8ICF0aGlzLnByZXNldFF1ZXJ5RWRpdG9yLmNvbnRlbnRzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnByZXNldFF1ZXJ5RWRpdG9yID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzOiBbXVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnF1ZXJ5RWRpdG9yID0gdGhpcy5jdXN0b21EZWVwQ2xvbmVRdWVyeUVkaXRvcih0aGlzLnByZXNldFF1ZXJ5RWRpdG9yKTtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLnF1ZXJ5RWRpdG9yIHx8ICF0aGlzLnF1ZXJ5RWRpdG9yLmNvbnRlbnRzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnF1ZXJ5RWRpdG9yID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzOiBbXVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRlbXAgPSB0aGlzLmN1c3RvbURlZXBDbG9uZVF1ZXJ5RWRpdG9yKHRoaXMucHJlc2V0UXVlcnlFZGl0b3IpO1xyXG4gICAgICAgICAgICB0aGlzLnF1ZXJ5RWRpdG9yID0gdGVtcDtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcXVlcnlFZGl0b3IgPSB0aGlzLnZhbGlkYXRlUXVlcnlFZGl0b3IoKTtcclxuICAgICAgICB0aGlzLmFwcGx5UXVlcnlFZGl0b3JUb0RhdGF0YWJsZShxdWVyeUVkaXRvcik7XHJcblxyXG4gICAgICAgIC8vIFNldCBkaXNhYmxlUmVzZXRCdXR0b24gdmFsdWVcclxuICAgICAgICB0aGlzLmRpc2FibGVSZXNldEJ1dHRvbiA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjdXN0b21EZWVwQ2xvbmVRdWVyeUVkaXRvcihpbnB1dDogUXVlcnlEYXRhKSB7XHJcbiAgICAgICAgY29uc3QgcmVzID0ge1xyXG4gICAgICAgICAgICBjb250ZW50czogW11cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBpZiAoaW5wdXQgJiYgaW5wdXQuY29udGVudHMgJiYgaW5wdXQuY29udGVudHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBpbnB1dC5jb250ZW50cy5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0gJiYgaXRlbS52YWx1ZSAmJiBpdGVtLnZhbHVlLnR5cGUgJiYgaXRlbS52YWx1ZS50eXBlID09PSBRdWVyeURhdGFJdGVtVmFsdWVUeXBlLlRpbWVzcGFuRHJvcGRvd24pIHtcclxuICAgICAgICAgICAgICAgICAgICByZXMuY29udGVudHNbaW5kZXhdID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShpdGVtKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBpdGVtLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS52YWx1ZSAmJiB2YWx1ZS52YWx1ZS5pc1ZhbGlkKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzLmNvbnRlbnRzW2luZGV4XS52YWx1ZS52YWx1ZSA9IG5ldyBEYXRlUmFuZ2UodmFsdWUudmFsdWUuc3RhcnQsIHZhbHVlLnZhbHVlLmVuZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS50ZW1wb3JhcnlWYWx1ZSAmJiB2YWx1ZS50ZW1wb3JhcnlWYWx1ZS5pc1ZhbGlkKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzLmNvbnRlbnRzW2luZGV4XS52YWx1ZS50ZW1wb3JhcnlWYWx1ZSA9IG5ldyBEYXRlUmFuZ2UodmFsdWUudGVtcG9yYXJ5VmFsdWUuc3RhcnQsIHZhbHVlLnRlbXBvcmFyeVZhbHVlLmVuZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXMuY29udGVudHNbaW5kZXhdID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShpdGVtKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJlcztcclxuICAgIH1cclxuXHJcbiAgICBARGVib3VuY2UoKVxyXG4gICAgcHVibGljIGdldFRpbWVyYW5nZURpc3BsYXlWYWx1ZSh2YWx1ZTogRGF0ZVJhbmdlKSB7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpbml0aWFsaXplT3BlcmFuZHNMaXN0KCkge1xyXG4gICAgICAgIGNvbnN0IHJlcyA9IG5ldyBBcnJheSgpO1xyXG4gICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhRdWVyeURhdGFPcGVyYW5kKTtcclxuICAgICAgICBpZiAoa2V5cyAmJiBrZXlzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBrZXlzLmZvckVhY2goKGtleSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKFF1ZXJ5RGF0YU9wZXJhbmRba2V5XSA9PT0gJzonKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IHtcclxuICAgICAgICAgICAgICAgICAgICBsYWJlbDoga2V5LFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBRdWVyeURhdGFPcGVyYW5kW2tleV1cclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICByZXMucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMub3BlcmFuZHMgPSByZXM7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB1cGRhdGVRdWVyeUVkaXRvckxhYmVsKGl0ZW06IFF1ZXJ5RGF0YUl0ZW0pOiB2b2lkIHtcclxuICAgICAgICBpZiAoaXRlbSAmJiBpdGVtLmNvbHVtbi52YWx1ZSkge1xyXG4gICAgICAgICAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmludGVybmFsQ29sdW1uTGlzdC5maW5kKChpKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaS52YWx1ZSA9PT0gaXRlbS5jb2x1bW4udmFsdWU7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBpdGVtLmNvbHVtbi5sYWJlbCA9IGNvbHVtbi5sYWJlbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBuZXdRdWVyeUVkaXRvckhlbHBlcihcclxuICAgICAgICBjb2x1bW46IHN0cmluZyxcclxuICAgICAgICB2YWx1ZTogc3RyaW5nLFxyXG4gICAgICAgIG9wZXJhbmQ/OiBzdHJpbmcsXHJcbiAgICAgICAgdmFsdWVUeXBlPzogUXVlcnlEYXRhSXRlbVZhbHVlVHlwZSk6IFF1ZXJ5RGF0YUl0ZW0ge1xyXG5cclxuICAgICAgICBjb25zdCByZXMgPSB7XHJcbiAgICAgICAgICAgIGNvbHVtbjoge1xyXG4gICAgICAgICAgICAgICAgbGFiZWw6ICcnLFxyXG4gICAgICAgICAgICAgICAgdmFsdWU6IGNvbHVtblxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBvcGVyYW5kOiBvcGVyYW5kID8gb3BlcmFuZCA6IFF1ZXJ5RGF0YU9wZXJhbmQuRXEsXHJcbiAgICAgICAgICAgIHZhbHVlOiB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUgPyB2YWx1ZSA6ICcnLFxyXG4gICAgICAgICAgICAgICAgdGVtcG9yYXJ5VmFsdWU6ICcnLFxyXG4gICAgICAgICAgICAgICAgdG9vbHRpcDogdmFsdWUgPyB2YWx1ZSA6ICcnLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogdmFsdWVUeXBlID8gdmFsdWVUeXBlIDogUXVlcnlEYXRhSXRlbVZhbHVlVHlwZS5UZXh0SW5wdXQsXHJcbiAgICAgICAgICAgICAgICBpc1ZhbHVlVW5zZXQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBzZWFyY2hhYmxlOiAodmFsdWVUeXBlID09PSBRdWVyeURhdGFJdGVtVmFsdWVUeXBlLlNpbmdsZURyb3Bkb3duXHJcbiAgICAgICAgICAgICAgICAgICAgfHwgdmFsdWVUeXBlID09PSBRdWVyeURhdGFJdGVtVmFsdWVUeXBlLk11bHRpU2VsZWN0RHJvcGRvd24pID8gdHJ1ZSA6IGZhbHNlXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGlzRWRpdGluZzogdHJ1ZSxcclxuICAgICAgICAgICAgaW52YWxpZDogdHJ1ZVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHJldHVybiByZXM7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjb2x1bW5MaXN0Q29uc3RydWN0b3IoY29sdW1uTGlzdDogRGF0YVRhYmxlQ29sdW1uQ29tcG9uZW50W10pIHtcclxuICAgICAgICBjb25zdCByZXM6IFF1ZXJ5RWRpdG9yRGF0YVRhYmxlQ29sdW1uTGlzdEl0ZW1bXSA9IFtdO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29sdW1uTGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAvLyBGaWx0ZXIgb3V0IGRpc2FibGVkIG9uZXNcclxuICAgICAgICAgICAgY29uc3QgY29sdW1uID0gY29sdW1uTGlzdFtpXTtcclxuICAgICAgICAgICAgaWYgKGNvbHVtbiAmJiBjb2x1bW4ucXVlcnlFZGl0b3JUeXBlXHJcbiAgICAgICAgICAgICAgICAmJiBjb2x1bW4ucXVlcnlFZGl0b3JUeXBlID09PSB0aGlzLnF1ZXJ5RGF0YUl0ZW1WYWx1ZVR5cGUuRGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlcy5wdXNoKHRoaXMuY29sdW1uTGlzdEhlbHBlcihjb2x1bW5MaXN0W2ldKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXM7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjb2x1bW5MaXN0SGVscGVyKGNvbHVtbkxpc3RJdGVtOiBEYXRhVGFibGVDb2x1bW5Db21wb25lbnQpOiBRdWVyeUVkaXRvckRhdGFUYWJsZUNvbHVtbkxpc3RJdGVtIHtcclxuICAgICAgICBjb25zdCByZXM6IFF1ZXJ5RWRpdG9yRGF0YVRhYmxlQ29sdW1uTGlzdEl0ZW0gPSB7XHJcbiAgICAgICAgICAgIGxhYmVsOiBjb2x1bW5MaXN0SXRlbS5oZWFkZXIsXHJcbiAgICAgICAgICAgIHZhbHVlOiBjb2x1bW5MaXN0SXRlbS5maWVsZCxcclxuICAgICAgICAgICAgcXVlcnlFZGl0b3JUeXBlOiBjb2x1bW5MaXN0SXRlbS5xdWVyeUVkaXRvclR5cGUgPyBjb2x1bW5MaXN0SXRlbS5xdWVyeUVkaXRvclR5cGUgOlxyXG4gICAgICAgICAgICAgICAgUXVlcnlEYXRhSXRlbVZhbHVlVHlwZS5UZXh0SW5wdXQsXHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAocmVzLnF1ZXJ5RWRpdG9yVHlwZSA9PT0gUXVlcnlEYXRhSXRlbVZhbHVlVHlwZS5UaW1lc3BhbkRyb3Bkb3duKSB7XHJcbiAgICAgICAgICAgIGlmIChjb2x1bW5MaXN0SXRlbS5xdWVyeUVkaXRvck9wdGlvbnMgJiYgY29sdW1uTGlzdEl0ZW0ucXVlcnlFZGl0b3JPcHRpb25zLmZpZWxkVmFsdWUubGVuZ3RoID4gMFxyXG4gICAgICAgICAgICAgICAgJiYgY29sdW1uTGlzdEl0ZW0ucXVlcnlFZGl0b3JPcHRpb25zLmZpZWxkTmFtZSA9PT0gcmVzLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICByZXMucHJlc2V0T3B0aW9ucyA9IGNvbHVtbkxpc3RJdGVtLnF1ZXJ5RWRpdG9yT3B0aW9ucy5maWVsZFZhbHVlO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmVzLnByZXNldE9wdGlvbnMgPSBbXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJlcztcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNldElzRWRpdGluZyhpdGVtOiBRdWVyeURhdGFJdGVtLCBpc0VkaXRpbmc6IGJvb2xlYW4pIHtcclxuICAgICAgICBpZiAoaXRlbSkge1xyXG4gICAgICAgICAgICBpdGVtLmlzRWRpdGluZyA9IGlzRWRpdGluZztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pc0VkaXRpbmcgPSBpc0VkaXRpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVGhpcyBmdW5jdGlvbiB3aWxsIHBvdGVudGlhbGx5IHVzZWQgZm9yIGNoZWNraW5nIGlmIHRoZSBwaWxsIHJlYWNoZXMgMzAwcHggbWF4IGFuZCBhbHNvIHZhbHVlIGZpZWxkIGRpc3BsYXkgaXMgaW4gZWxsZXBzaXNcclxuICAgIEBZaWVsZCgpXHJcbiAgICBwdWJsaWMgY2hlY2tWYWx1ZUZpZWxkVHJ1bmNhdGVkKGlucHV0KTogYm9vbGVhbiB7XHJcbiAgICAgICAgLy8gY2hlY2tWYWx1ZUZpZWxkVHJ1bmNhdGVkUmVjb3JkcyBoZWxwcyByZW5kZXJpbmcgZm9yIHRob3NlIHByZXNldCBwaWxscyB0byByZW5kZXIgcHJvcGVybHkuXHJcbiAgICAgICAgLy8gaWYgcmVhY2hlcyBsaW1pdCAzMDBweCBhbmQgdmFsdWUgaGFzIGVsbGlwc2lzIHdpbGwgdXBkYXRlIHRoZSBjc3Mgc28gdGhhdCB2YWx1ZSBjYW4gdGFrZSA3MCUgd2lkdGhcclxuICAgICAgICAvLyBCeSBkZXNpZ24uXHJcbiAgICAgICAgaWYgKHRoaXMuY2hlY2tWYWx1ZUZpZWxkVHJ1bmNhdGVkUmVjb3JkcyAmJiB0aGlzLmNoZWNrVmFsdWVGaWVsZFRydW5jYXRlZFJlY29yZHMuaW5jbHVkZXMoaW5wdXQpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmNoZWNrVmFsdWVGaWVsZFRydW5jYXRlZFJlY29yZHMucHVzaChpbnB1dCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCByZXMgPSBmYWxzZSwgdmFsdWVIdG1sO1xyXG4gICAgICAgIGNvbnN0IHRhcmdldFBpbGwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpbnB1dCk7XHJcbiAgICAgICAgaWYgKHRhcmdldFBpbGwgJiYgdGFyZ2V0UGlsbC5jaGlsZHJlbiAmJiB0YXJnZXRQaWxsLmNoaWxkcmVuLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRhcmdldFBpbGwuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gdGFyZ2V0UGlsbC5jaGlsZHJlbltpXTtcclxuICAgICAgICAgICAgICAgIGlmIChjaGlsZC5jbGFzc05hbWUgJiYgY2hpbGQuY2xhc3NOYW1lLm1hdGNoKC9zbWUtcXVlcnktZWRpdG9yLXZhbHVlLykpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZUh0bWwgPSBjaGlsZDtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodmFsdWVIdG1sKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsdWVIdG1sLnNjcm9sbFdpZHRoID4gdmFsdWVIdG1sLm9mZnNldFdpZHRoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBnZXRJbml0aWFsSG9zdENsYXNzZXMoKTogc3RyaW5nW10ge1xyXG4gICAgICAgIHJldHVybiBzdXBlci5nZXRJbml0aWFsSG9zdENsYXNzZXMoKS5jb25jYXQoXHJcbiAgICAgICAgICAgICdzbWUtcXVlcnktZWRpdG9yJyxcclxuICAgICAgICAgICAgJ3NtZS1sYXlvdXQtcXVlcnktZWRpdG9yJyxcclxuICAgICAgICAgICAgJ3NtZS1mb2N1cy16b25lJ1xyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzZXRTZWxlY3RlZEl0ZW1WYWx1ZShpdGVtOiBRdWVyeURhdGFJdGVtLCB0YXJnZXQ6IGFueSkge1xyXG4gICAgICAgIGl0ZW0udmFsdWUudmFsdWUgPSB0YXJnZXQ7XHJcbiAgICAgICAgaXRlbS52YWx1ZS50b29sdGlwID0gaXRlbS52YWx1ZS52YWx1ZS50b1N0cmluZygpO1xyXG4gICAgICAgIGlmIChpdGVtLnZhbHVlLnR5cGUgPT09IFF1ZXJ5RGF0YUl0ZW1WYWx1ZVR5cGUuVGltZXNwYW5Ecm9wZG93bikge1xyXG4gICAgICAgICAgICBpdGVtLnZhbHVlLnRlbXBvcmFyeVZhbHVlID0gdGFyZ2V0O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25DdXN0b21MYWJlbEVtaXQobGFiZWw6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtLnZhbHVlLmN1c3RvbURpc3BsYXlMYWJlbCA9IGxhYmVsO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFRPRE86IGNvbnNpZGVyaW5nIHRoZSBjdWJlIGNvbXBsZXhpdHksIG9uZSBvcHRpb24gaXMgdG8gcmVxdWlyZSB0aGUgdXNlciB0byBwYXNzIGluIHRoZSBwcmVzZWxlY3RlZCBvYmplY3QgYXMgd2VsbC5cclxuICAgIHByaXZhdGUgdXBkYXRlUHJlc2V0UXVlcnlFZGl0b3JDdXN0b21MYWJlbHMoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucHJlc2V0UXVlcnlFZGl0b3IgJiYgdGhpcy5wcmVzZXRRdWVyeUVkaXRvci5jb250ZW50cyAmJiB0aGlzLnByZXNldFF1ZXJ5RWRpdG9yLmNvbnRlbnRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnByZXNldFF1ZXJ5RWRpdG9yLmNvbnRlbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwaWxsID0gdGhpcy5wcmVzZXRRdWVyeUVkaXRvci5jb250ZW50c1tpXTtcclxuICAgICAgICAgICAgICAgIGlmIChwaWxsICYmIHBpbGwudmFsdWUgJiYgcGlsbC52YWx1ZS50eXBlID09PSBRdWVyeURhdGFJdGVtVmFsdWVUeXBlLlRpbWVzcGFuRHJvcGRvd24pIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuaW50ZXJuYWxDb2x1bW5MaXN0Lmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXMuaW50ZXJuYWxDb2x1bW5MaXN0W2pdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0ICYmIHRhcmdldC5wcmVzZXRPcHRpb25zICYmIHRhcmdldC5wcmVzZXRPcHRpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldE9wdGlvbiA9IHRhcmdldC5wcmVzZXRPcHRpb25zLmZpbmQoKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS52YWx1ZS5pc0VxdWFsVG8ocGlsbC52YWx1ZS52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpbGwudmFsdWUuY3VzdG9tRGlzcGxheUxhYmVsID0gdGFyZ2V0T3B0aW9uLmxhYmVsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNMb2FkaW5nXCI+XHJcbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInF1ZXJ5RWRpdG9yJiZxdWVyeUVkaXRvci5jb250ZW50c1wiPlxyXG4gICAgPGRpdiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBxdWVyeUVkaXRvci5jb250ZW50czsgbGV0IGluZGV4ID0gaW5kZXhcIiBjbGFzcz1cInNtZS1xdWVyeS1lZGl0b3ItcGlsbFwiXHJcbiAgICAgIFtjbGFzcy5zbWUtZGlzYWJsZWRdPVwiaXRlbS5kaXNhYmxlZFwiIFtjbGFzcy5zbWUtaW52YWxpZF09XCJpdGVtLmludmFsaWQmJiFpdGVtLmlzRWRpdGluZ1wiXHJcbiAgICAgIFtjbGFzcy5zbWUtaXJyZW1vdmFibGVdPVwiaXRlbS5pcnJlbW92YWJsZVwiIFtjbGFzcy5zbWUtZm9jdXMtdHJhcF09XCJpdGVtLmlzRWRpdGluZ1wiXHJcbiAgICAgIChrZXlkb3duLkRlbGV0ZSk9XCJyZW1vdmVRdWVyeUVkaXRvckl0ZW0oJGV2ZW50LCBpbmRleCwgdHJ1ZSlcIiAoZm9jdXMpPVwic2V0U2VsZWN0ZWRIdG1sKClcIiByb2xlPVwibWVudWl0ZW1cIlxyXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiZ2V0TWVudUl0ZW1MYWJlbChpbmRleClcIiAoa2V5ZG93bi5FbnRlcik9XCJvblBpbGxFbnRlclRyYXAoJGV2ZW50LCBpdGVtLCBpbmRleClcIlxyXG4gICAgICB0YWJpbmRleD1cIjBcIj5cclxuICAgICAgPGRpdiAqbmdJZj1cIiFpdGVtLmlzRWRpdGluZ1wiIFtzbWVUb29sdGlwXT1cInRvb2x0aXBcIlxyXG4gICAgICAgIGNsYXNzPVwic21lLXF1ZXJ5LWVkaXRvci1waWxsLWNvbnRlbnQgc21lLXF1ZXJ5LWVkaXRvci1waWxsLWNvbnRlbnQtcHJldmlld1wiXHJcbiAgICAgICAgKGNsaWNrKT1cIm9uUGlsbENsaWNrKGl0ZW0sIGluZGV4KVwiIFtpZF09XCJpZEJhZy5waWxsTGFiZWwgKyBpbmRleFwiPlxyXG4gICAgICAgIDwhLS0gSWNvbiAtLT5cclxuICAgICAgICA8c3BhbiByb2xlPVwicHJlc2VudGF0aW9uXCIgKm5nSWY9XCJpdGVtLmljb25cIiBjbGFzcz1cInNtZS1xdWVyeS1lZGl0b3ItaWNvblwiIFtuZ0NsYXNzXT1cIml0ZW0uaWNvblwiPjwvc3Bhbj5cclxuICAgICAgICA8IS0tIEtleSAtLT5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cInNtZS1xdWVyeS1lZGl0b3ItY29sdW1uXCI+e3tpdGVtLmNvbHVtbi5sYWJlbH19PC9zcGFuPlxyXG4gICAgICAgIDxzbWUtbG9hZGluZy13aGVlbCAqbmdJZj1cImlzQ29sdW1uRHJvcGRvd25CdXN5XCIgW2lzQmFja2dyb3VuZFRyYW5zcGFyZW50XT1cInRydWVcIiBzaXplPVwiZXh0cmEtc21hbGxcIj5cclxuICAgICAgICA8L3NtZS1sb2FkaW5nLXdoZWVsPlxyXG4gICAgICAgIDwhLS0gT3BlcmF0b3IgLS0+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJzbWUtcXVlcnktZWRpdG9yLW9wZXJhdG9yXCI+e3tnZXRJdGVtT3BlcmF0b3JEaXNwbGF5VmFsdWUoaXRlbSl9fTwvc3Bhbj5cclxuICAgICAgICA8IS0tIFZhbHVlIC0tPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwic21lLXF1ZXJ5LWVkaXRvci12YWx1ZVwiPlxyXG4gICAgICAgICAgPHN0cm9uZz5cclxuICAgICAgICAgICAgPHNwYW4+e3tnZXRJdGVtRGlzcGxheVZhbHVlKGl0ZW0pfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtLmludmFsaWQmJihpdGVtLnZhbHVlLnR5cGU9PT1xdWVyeURhdGFJdGVtVmFsdWVUeXBlLlRleHRJbnB1dHx8aXRlbS52YWx1ZS50eXBlPT09cXVlcnlEYXRhSXRlbVZhbHVlVHlwZS5TaW5nbGVEcm9wZG93bnx8aXRlbS52YWx1ZS50eXBlPT09cXVlcnlEYXRhSXRlbVZhbHVlVHlwZS5UaW1lc3BhbkRyb3Bkb3duKVwiPnt7cmVzb3VyY2VTdHJpbmdzLlVuc2V0fX08L2k+XHJcbiAgICAgICAgICAgIDwhLS0gW25nQ2xhc3NdPVwiY2hlY2tWYWx1ZUZpZWxkVHJ1bmNhdGVkKGlkQmFnLnBpbGxMYWJlbCArIGluZGV4KSA/ICdzbWUtcXVlcnktZWRpdG9yLWNvbHVtbi1lbGxpcHNpcyc6ICcnXCI+PHN0cm9uZz57e2l0ZW0udmFsdWUudmFsdWV9fTwvc3Ryb25nPjwvc3Bhbj4gLS0+XHJcbiAgICAgICAgICA8L3N0cm9uZz5cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJzbWUtc2NyZWVuLXJlYWRlclwiPlxyXG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCIhIWl0ZW0uZGlzYWJsZWRcIiBbaWRdPVwiaWRCYWcuZGlzYWJsZWRMYWJlbCArIGluZGV4XCI+e3tyZXNvdXJjZVN0cmluZ3MuUmVhZE9ubHl9fTwvc3Bhbj5cclxuXHJcbiAgICAgICAgICA8c3BhbiAqbmdJZj1cIiEhaXRlbS5pcnJlbW92YWJsZVwiXHJcbiAgICAgICAgICAgIFtpZF09XCJpZEJhZy5pcnJlbW92YWJsZUxhYmVsICsgaW5kZXhcIj57e3Jlc291cmNlU3RyaW5ncy5JcnJlbW92YWJsZX19PC9zcGFuPlxyXG5cclxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWl0ZW0uaXJyZW1vdmFibGVcIlxyXG4gICAgICAgICAgICBbaWRdPVwiaWRCYWcucmVtb3ZhYmxlTGFiZWwgKyBpbmRleFwiPnt7cmVzb3VyY2VTdHJpbmdzLlJlbW92YWJsZUhpbnR9fTwvc3Bhbj5cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIiFpdGVtLmlycmVtb3ZhYmxlXCIgKG1vdXNldXApPVwicmVtb3ZlUXVlcnlFZGl0b3JJdGVtKCRldmVudCwgaW5kZXgpXCJcclxuICAgICAgICAgIChrZXlkb3duLkVudGVyKT1cInJlbW92ZVF1ZXJ5RWRpdG9ySXRlbSgkZXZlbnQsIGluZGV4LCB0cnVlKVwiIHJvbGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJyZXNvdXJjZVN0cmluZ3MuRGVsZXRlXCIgY2xhc3M9XCJzbWUtcXVlcnktZWRpdG9yLXJlbW92ZS1idXR0b25cIlxyXG4gICAgICAgICAgW3RhYmluZGV4XT1cIml0ZW0uaXNFZGl0aW5nID8gMCA6IC0xXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInNtZS1pY29uIHNtZS1xdWVyeS1lZGl0b3ItcmVtb3ZlLWJ1dHRvbi1pY29uXCI+PC9zcGFuPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPG5nLXRlbXBsYXRlICN0b29sdGlwPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzbWUtcXVlcnktZWRpdG9yLXRvb2x0aXBcIj57e2l0ZW0uY29sdW1uLmxhYmVsfX0ge3tpdGVtLm9wZXJhbmR9fVxyXG4gICAgICAgICAgPHN0cm9uZyAqbmdJZj1cIml0ZW0udmFsdWUudHlwZSE9PXF1ZXJ5RGF0YUl0ZW1WYWx1ZVR5cGUuVGltZXNwYW5Ecm9wZG93blwiPlxyXG4gICAgICAgICAgICB7e2l0ZW0udmFsdWUuaXNWYWx1ZVVuc2V0ID8gdGhpcy5yZXNvdXJjZVN0cmluZ3MuVW5zZXQgOiBpdGVtLnZhbHVlLnZhbHVlfX08L3N0cm9uZz5cclxuICAgICAgICAgIDxzdHJvbmcgKm5nSWY9XCJpdGVtLnZhbHVlLnR5cGU9PT1xdWVyeURhdGFJdGVtVmFsdWVUeXBlLlRpbWVzcGFuRHJvcGRvd25cIj5cclxuICAgICAgICAgICAge3tpdGVtLnZhbHVlLmlzVmFsdWVVbnNldCA/IHRoaXMucmVzb3VyY2VTdHJpbmdzLlVuc2V0IDogaXRlbS52YWx1ZS50b29sdGlwfX08L3N0cm9uZz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgPGZvcm0gKm5nSWY9XCJpdGVtLmlzRWRpdGluZ1wiXHJcbiAgICAgICAgY2xhc3M9XCJzbWUtcXVlcnktZWRpdG9yLXBpbGwtY29udGVudCBzbWUtcXVlcnktZWRpdG9yLXBpbGwtY29udGVudC1lZGl0aW5nIHNtZS1mb2N1cy10cmFwXCJcclxuICAgICAgICAoa2V5ZG93bi5FbnRlcik9XCJvblBpbGxFeGl0VHJhcCgkZXZlbnQpXCIgKGtleWRvd24uRXNjKT1cIm9uUGlsbEV4aXRUcmFwKCRldmVudClcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic21lLXF1ZXJ5LWVkaXRvci1jb2x1bW5cIj5cclxuICAgICAgICAgIDxzbWUtZm9ybS1maWVsZCB0eXBlPVwiY29tYm9ib3hcIiBuYW1lPVwidmFsdWVcIiBbKG5nTW9kZWwpXT1cIml0ZW0uY29sdW1uLnZhbHVlXCJcclxuICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25RdWVyeUVkaXRvckNoYW5nZShpbmRleCwgdHJ1ZSwgbnVsbCwgdHJ1ZSlcIiBjbGFzcz1cInNtZS1xdWVyeS1lZGl0b3ItY29sdW1uXCJcclxuICAgICAgICAgICAgW2NvbXBhY3RdPVwidHJ1ZVwiIFttaW5pbWFsXT1cInRydWVcIiBbY2xhc3Muc21lLWZvY3VzLXpvbmVdPVwiaXRlbS5pc0VkaXRpbmdcIlxyXG4gICAgICAgICAgICAqbmdJZj1cIiEoaXRlbS5jb2x1bW4mJml0ZW0uY29sdW1uLnVuZWRpdGFibGUpXCIgW3BsYWNlaG9sZGVyXT1cInJlc291cmNlU3RyaW5ncy5TZWxlY3RLZXlcIlxyXG4gICAgICAgICAgICBbZHJvcGRvd25BcHBseUZvcm1GaWVsZE9mZnNldFdpZHRoXT1cImZhbHNlXCI+XHJcbiAgICAgICAgICAgIDxzbWUtb3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgaW50ZXJuYWxDb2x1bW5MaXN0XCIgW3ZhbHVlXT1cIm9wdGlvbi52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cIm9wdGlvbi5sYWJlbFwiPlxyXG4gICAgICAgICAgICA8L3NtZS1vcHRpb24+XHJcbiAgICAgICAgICA8L3NtZS1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJpdGVtLmNvbHVtbiYmaXRlbS5jb2x1bW4udW5lZGl0YWJsZVwiPnt7aXRlbS5jb2x1bW4ubGFiZWx9fTwvc3Bhbj5cclxuICAgICAgICAgIDxzbWUtbG9hZGluZy13aGVlbCAqbmdJZj1cImlzQ29sdW1uRHJvcGRvd25CdXN5XCIgW2lzQmFja2dyb3VuZFRyYW5zcGFyZW50XT1cInRydWVcIiBzaXplPVwiZXh0cmEtc21hbGxcIj5cclxuICAgICAgICAgIDwvc21lLWxvYWRpbmctd2hlZWw+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0NvbHVtbkRyb3Bkb3duQnVzeVwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNtZS1xdWVyeS1lZGl0b3Itb3BlcmF0b3JcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzbWUtcXVlcnktZWRpdG9yLW9wZXJhdG9yXCJcclxuICAgICAgICAgICAgICAqbmdJZj1cIiEhaXRlbS5jb2x1bW4udmFsdWUmJihpdGVtLnZhbHVlLnR5cGU9PT1xdWVyeURhdGFJdGVtVmFsdWVUeXBlLlNpbmdsZURyb3Bkb3dufHxpdGVtLnZhbHVlLnR5cGU9PT1xdWVyeURhdGFJdGVtVmFsdWVUeXBlLk11bHRpU2VsZWN0RHJvcGRvd258fGl0ZW0udmFsdWUudHlwZT09PXF1ZXJ5RGF0YUl0ZW1WYWx1ZVR5cGUuVGltZXNwYW5Ecm9wZG93bilcIj5cclxuICAgICAgICAgICAgICB7e3F1ZXJ5RGF0YU9wZXJhbmQuRHJvcGRvd25zfX0gPC9zcGFuPlxyXG4gICAgICAgICAgICA8c21lLWZvcm0tZmllbGRcclxuICAgICAgICAgICAgICAqbmdJZj1cIiEhaXRlbS5jb2x1bW4udmFsdWUmJihpdGVtLnZhbHVlLnR5cGU9PT1xdWVyeURhdGFJdGVtVmFsdWVUeXBlLlRleHRJbnB1dClcIlxyXG4gICAgICAgICAgICAgIHR5cGU9XCJjb21ib2JveFwiIG5hbWU9XCJvcGVyYW5kXCIgWyhuZ01vZGVsKV09XCJpdGVtLm9wZXJhbmRcIlxyXG4gICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uUXVlcnlFZGl0b3JDaGFuZ2UoaW5kZXgsIG51bGwsIG51bGwsIHRydWUpXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cInNtZS1xdWVyeS1lZGl0b3Itb3BlcmF0b3Igc21lLWZvY3VzLXpvbmVcIlxyXG4gICAgICAgICAgICAgIFtjbGFzcy5zbWUtcXVlcnktZWRpdG9yLXZhbHVlLWlycmVtb3ZhYmxlXT1cIiEhaXRlbS5pcnJlbW92YWJsZVwiIFtjb21wYWN0XT1cInRydWVcIlxyXG4gICAgICAgICAgICAgIFttaW5pbWFsXT1cInRydWVcIiBbZHJvcGRvd25BcHBseUZvcm1GaWVsZE9mZnNldFdpZHRoXT1cImZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgPHNtZS1vcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBvcGVyYW5kc1wiIFt2YWx1ZV09XCJxdWVyeURhdGFPcGVyYW5kW29wdGlvbl1cIiBbbGFiZWxdPVwicXVlcnlEYXRhT3BlcmFuZFtvcHRpb25dXCI+XHJcbiAgICAgICAgICAgICAgPC9zbWUtb3B0aW9uPlxyXG4gICAgICAgICAgICA8L3NtZS1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiISFpdGVtPy5jb2x1bW4/LnZhbHVlXCIgY2xhc3M9XCJzbWUtcXVlcnktZWRpdG9yLXZhbHVlIHNtZS1mb2N1cy16b25lXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJnZXRUZW1wbGF0ZShpdGVtKTtjb250ZXh0OnskaW1wbGljaXQ6aXRlbSwgaW5kZXg6IGluZGV4fVwiPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKm5nSWY9XCIhaXRlbS5pcnJlbW92YWJsZVwiIChtb3VzZXVwKT1cInJlbW92ZVF1ZXJ5RWRpdG9ySXRlbSgkZXZlbnQsIGluZGV4KVwiXHJcbiAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIiBbYXR0ci5hcmlhLWxhYmVsXT1cInJlc291cmNlU3RyaW5ncy5EZWxldGVcIlxyXG4gICAgICAgICAgICAoa2V5ZG93bi5FbnRlcik9XCJyZW1vdmVRdWVyeUVkaXRvckl0ZW0oJGV2ZW50LCBpbmRleCwgdHJ1ZSlcIlxyXG4gICAgICAgICAgICBjbGFzcz1cInNtZS1xdWVyeS1lZGl0b3ItcmVtb3ZlLWJ1dHRvbiBzbWUtZm9jdXMtem9uZVwiIFt0YWJpbmRleF09XCJpdGVtLmlzRWRpdGluZyA/IDAgOiAtMVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNtZS1pY29uIHNtZS1xdWVyeS1lZGl0b3ItcmVtb3ZlLWJ1dHRvbi1pY29uXCI+PC9zcGFuPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvZm9ybT5cclxuICAgIDwvZGl2PlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG4gIDxkaXYgKm5nSWY9XCJzaG93QWRkQnV0dG9uXCIgKG1vdXNldXApPVwibmV3UXVlcnlFZGl0b3IoJGV2ZW50KVwiIChrZXlkb3duLkVudGVyKT1cIm5ld1F1ZXJ5RWRpdG9yKCRldmVudCwgdHJ1ZSlcIlxyXG4gICAgY2xhc3M9XCJzbWUtcXVlcnktZWRpdG9yLXBpbGwgc21lLWlycmVtb3ZhYmxlXCIgcm9sZT1cIm1lbnVpdGVtXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwic21lLXF1ZXJ5LWVkaXRvci1waWxsLWNvbnRlbnRcIiB0YWJpbmRleD1cIjBcIiByb2xlPVwiYnV0dG9uXCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwic21lLWljb24gc21lLWljb24tZmlsdGVyIHNtZS1xdWVyeS1lZGl0b3ItaWNvblwiPjwvc3Bhbj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJzbWUtcXVlcnktZWRpdG9yLXZhbHVlXCI+e3tyZXNvdXJjZVN0cmluZ3MuTmV3fX08L3NwYW4+PC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPGJ1dHRvbiAqbmdJZj1cInNob3dSZXNldEJ1dHRvblwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwicmVzZXRRdWVyeUVkaXRvcigpXCIgY2xhc3M9XCJzbWUtYnV0dG9uLXRyaWdnZXJcIlxyXG4gICAgdGFiaW5kZXg9XCIwXCIgW2Rpc2FibGVkXT1cImRpc2FibGVSZXNldEJ1dHRvblwiPnt7cmVzb3VyY2VTdHJpbmdzLlJlc2V0fX1cclxuICA8L2J1dHRvbj5cclxuPC9uZy1jb250YWluZXI+XHJcbjxkaXYgY2xhc3M9XCJzbWUtbGF5b3V0LXJlbGF0aXZlXCIgKm5nSWY9XCJpc0xvYWRpbmdcIj5cclxuICA8c21lLWxvYWRpbmctd2hlZWwgW2lzQmFja2dyb3VuZFRyYW5zcGFyZW50XT1cInRydWVcIiBzaXplPVwic21hbGxcIj48L3NtZS1sb2FkaW5nLXdoZWVsPlxyXG48L2Rpdj5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjbXVsdGlTZWxlY3RUZW1wbGF0ZSBsZXQtaXRlbSBsZXQtaW5kZXg9XCJpbmRleFwiPlxyXG4gIDxzbWUtZm9ybS1maWVsZCB0eXBlPVwiY29tYm9ib3hcIiBuYW1lPVwidGVtcG9yYXJ5VmFsdWVcIiBbKG5nTW9kZWwpXT1cIml0ZW0udmFsdWUudGVtcG9yYXJ5VmFsdWVcIlxyXG4gICAgKG5nTW9kZWxDaGFuZ2UpPVwib25RdWVyeUVkaXRvckNoYW5nZShpbmRleCwgbnVsbCwgdHJ1ZSlcIiBbbXVsdGlwbGVdPVwidHJ1ZVwiIFttaW5pbWFsXT1cInRydWVcIiBbY29tcGFjdF09XCJ0cnVlXCJcclxuICAgIFtwbGFjZWhvbGRlcl09XCJyZXNvdXJjZVN0cmluZ3MuU2VsZWN0VmFsdWVcIiAoa2V5ZG93bi5FbnRlcik9XCJvblZhbHVlRmllbGRFbnRlcktleWRvd24oJGV2ZW50LCBpbmRleClcIlxyXG4gICAgW3NlYXJjaGFibGVdPVwiISFpdGVtLnZhbHVlLnNlYXJjaGFibGVcIiBbZHJvcGRvd25BcHBseUZvcm1GaWVsZE9mZnNldFdpZHRoXT1cImZhbHNlXCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uRHJvcGRvd25EYXRhICYmIGNvbHVtbkRyb3Bkb3duRGF0YS5sZW5ndGggPiAwXCI+XHJcbiAgICAgIDxzbWUtb3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgY29sdW1uRHJvcGRvd25EYXRhXCIgW3ZhbHVlXT1cIm9wdGlvblwiIFtsYWJlbF09XCJvcHRpb25cIj5cclxuICAgICAgPC9zbWUtb3B0aW9uPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgPC9zbWUtZm9ybS1maWVsZD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjdGV4dFRlbXBsYXRlIGxldC1pdGVtIGxldC1pbmRleD1cImluZGV4XCI+XHJcbiAgPHNtZS1mb3JtLWZpZWxkIHR5cGU9XCJ0ZXh0XCIgbmFtZT1cInRlbXBvcmFyeVZhbHVlXCIgWyhuZ01vZGVsKV09XCJpdGVtLnZhbHVlLnRlbXBvcmFyeVZhbHVlXCJcclxuICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uUXVlcnlFZGl0b3JDaGFuZ2UoaW5kZXgsIG51bGwsIHRydWUpXCIgW21pbmltYWxdPVwidHJ1ZVwiIFtjb21wYWN0XT1cInRydWVcIlxyXG4gICAgKGtleWRvd24uRW50ZXIpPVwib25WYWx1ZUZpZWxkRW50ZXJLZXlkb3duKCRldmVudCwgaW5kZXgpXCIgW3BsYWNlaG9sZGVyXT1cInJlc291cmNlU3RyaW5ncy5TZWxlY3RWYWx1ZVwiPlxyXG4gIDwvc21lLWZvcm0tZmllbGQ+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI3NpbmdsZVNlbGVjdFRlbXBsYXRlIGxldC1pdGVtIGxldC1pbmRleD1cImluZGV4XCI+XHJcbiAgPHNtZS1mb3JtLWZpZWxkIHR5cGU9XCJjb21ib2JveFwiIG5hbWU9XCJ0ZW1wb3JhcnlWYWx1ZVwiIFsobmdNb2RlbCldPVwiaXRlbS52YWx1ZS50ZW1wb3JhcnlWYWx1ZVwiXHJcbiAgICAobmdNb2RlbENoYW5nZSk9XCJvblF1ZXJ5RWRpdG9yQ2hhbmdlKGluZGV4LCBudWxsLCB0cnVlKVwiIFttaW5pbWFsXT1cInRydWVcIiBbY29tcGFjdF09XCJ0cnVlXCJcclxuICAgIFtwbGFjZWhvbGRlcl09XCJyZXNvdXJjZVN0cmluZ3MuU2VsZWN0VmFsdWVcIiAoa2V5ZG93bi5FbnRlcik9XCJvblZhbHVlRmllbGRFbnRlcktleWRvd24oJGV2ZW50LCBpbmRleClcIlxyXG4gICAgW3NlYXJjaGFibGVdPVwiISFpdGVtLnZhbHVlLnNlYXJjaGFibGVcIiBbZHJvcGRvd25BcHBseUZvcm1GaWVsZE9mZnNldFdpZHRoXT1cImZhbHNlXCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uRHJvcGRvd25EYXRhICYmIGNvbHVtbkRyb3Bkb3duRGF0YS5sZW5ndGggPiAwXCI+XHJcbiAgICAgIDxzbWUtb3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgY29sdW1uRHJvcGRvd25EYXRhXCIgW3ZhbHVlXT1cIm9wdGlvblwiIFtsYWJlbF09XCJvcHRpb25cIj5cclxuICAgICAgPC9zbWUtb3B0aW9uPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgPC9zbWUtZm9ybS1maWVsZD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjdGltZXNwYW5TZWxlY3RUZW1wbGF0ZSBsZXQtaXRlbSBsZXQtaW5kZXg9XCJpbmRleFwiPlxyXG4gIDxzbWUtZm9ybS1maWVsZCB0eXBlPVwiZGF0ZXRpbWVyYW5nZVwiIG5hbWU9XCJ0ZW1wb3JhcnlWYWx1ZVwiIFsobmdNb2RlbCldPVwiaXRlbS52YWx1ZS50ZW1wb3JhcnlWYWx1ZVwiXHJcbiAgICAobmdNb2RlbENoYW5nZSk9XCJvblF1ZXJ5RWRpdG9yQ2hhbmdlKGluZGV4LCBudWxsLCB0cnVlKVwiIFttaW5pbWFsXT1cInRydWVcIiBbY29tcGFjdF09XCJ0cnVlXCJcclxuICAgIFtwbGFjZWhvbGRlcl09XCJyZXNvdXJjZVN0cmluZ3MuU2VsZWN0VmFsdWVcIiAoa2V5ZG93bi5FbnRlcik9XCJvblZhbHVlRmllbGRFbnRlcktleWRvd24oJGV2ZW50LCBpbmRleClcIlxyXG4gICAgW2Ryb3Bkb3duQXBwbHlGb3JtRmllbGRPZmZzZXRXaWR0aF09XCJmYWxzZVwiIChjdXN0b21MYWJlbEVtaXR0ZXIpPVwib25DdXN0b21MYWJlbEVtaXQoJGV2ZW50KVwiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbkRyb3Bkb3duRGF0YSAmJiBjb2x1bW5Ecm9wZG93bkRhdGEubGVuZ3RoID4gMFwiPlxyXG4gICAgICA8c21lLWRhdGUtcmFuZ2Utb3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgY29sdW1uRHJvcGRvd25EYXRhXCIgW3ZhbHVlXT1cIm9wdGlvbi52YWx1ZVwiXHJcbiAgICAgICAgW2xhYmVsXT1cIm9wdGlvbi5sYWJlbFwiPlxyXG4gICAgICA8L3NtZS1kYXRlLXJhbmdlLW9wdGlvbj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gIDwvc21lLWZvcm0tZmllbGQ+XHJcbjwvbmctdGVtcGxhdGU+XHJcbiJdfQ==
|
|
1426
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FuZ3VsYXIvc3JjL2NvbnRyb2xzL3F1ZXJ5LWVkaXRvci9xdWVyeS1lZGl0b3IuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYW5ndWxhci9zcmMvY29udHJvbHMvcXVlcnktZWRpdG9yL3F1ZXJ5LWVkaXRvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxXQUFXLEVBQ1gsWUFBWSxFQUNaLEtBQUssRUFHTCxTQUFTLEVBQ1QsV0FBVyxFQUNYLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sK0RBQStELENBQUM7QUFDMUYsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDhFQUE4RSxDQUFDO0FBQ3hHLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSwwRUFBMEUsQ0FBQztBQUNqRyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0VBQWdFLENBQUM7QUFDMUYsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDhEQUE4RCxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUV2RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUU3RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN4RSxPQUFPLEVBQ0gsU0FBUyxFQUlULHNCQUFzQixFQUN0QixnQkFBZ0IsRUFDbkIsTUFBTSx5QkFBeUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lDaEJ6QiwyQkFBdUc7OztJQUE3Qix1Q0FBcUI7OztJQUcvRix3Q0FDb0I7O0lBRDRCLDhDQUFnQzs7O0lBUTVFLHlCQUNpTTtJQUFBLFlBQXlCO0lBQUEsaUJB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QUFtQixNQStHMUIsYUFBYTtrQkFEWixZQUFZO21CQUFDLFNBQVM7WUFPdkIsVUFBVTtrQkFEVCxZQUFZO21CQUFDLGtCQUFrQjtZQVV6Qix3QkFBd0IsTUFXdkIsbUJBQW1CLE1BU25CLHlCQUF5QixNQXlCekIsb0JBQW9CLE1BUXJCLGNBQWMsTUErR2IsbUJBQW1CLE1Bc0duQiw2QkFBNkIsTUFzRjlCLHdCQUF3QixNQXFHeEIsd0JBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgIENvbXBvbmVudCxcclxuICAgIEhvc3RCaW5kaW5nLFxyXG4gICAgSG9zdExpc3RlbmVyLFxyXG4gICAgSW5wdXQsXHJcbiAgICBPbkRlc3Ryb3ksXHJcbiAgICBPbkluaXQsXHJcbiAgICBRdWVyeUxpc3QsXHJcbiAgICBUZW1wbGF0ZVJlZixcclxuICAgIFZpZXdDaGlsZFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEYXRlUmFuZ2UgfSBmcm9tICdAbWljcm9zb2Z0L3dpbmRvd3MtYWRtaW4tY2VudGVyLXNkay9jb3JlL2Jhc2UvZGF0ZS9kYXRlLXJhbmdlJztcclxuaW1wb3J0IHsgRGVib3VuY2UgfSBmcm9tICdAbWljcm9zb2Z0L3dpbmRvd3MtYWRtaW4tY2VudGVyLXNkay9jb3JlL2Jhc2UvZGVjb3JhdG9ycy9kZWJvdW5jZS5kZWNvcmF0b3JzJztcclxuaW1wb3J0IHsgWWllbGQgfSBmcm9tICdAbWljcm9zb2Z0L3dpbmRvd3MtYWRtaW4tY2VudGVyLXNkay9jb3JlL2Jhc2UvZGVjb3JhdG9ycy95aWVsZC5kZWNvcmF0b3InO1xyXG5pbXBvcnQgeyBMb2dMZXZlbCB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvZGlhZ25vc3RpY3MvbG9nLWxldmVsJztcclxuaW1wb3J0IHsgTG9nZ2luZyB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvZGlhZ25vc3RpY3MvbG9nZ2luZyc7XHJcbmltcG9ydCB7IERvbSB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvZG9tL2RvbSc7XHJcbmltcG9ydCB7IFN0cmluZ3MgfSBmcm9tICcuLi8uLi9nZW5lcmF0ZWQvc3RyaW5ncyc7XHJcbmltcG9ydCB7IENvcmVCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tbW9uL2Jhc2UuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRGF0YVRhYmxlQ29sdW1uQ29tcG9uZW50IH0gZnJvbSAnLi4vZGF0YS10YWJsZS9kYXRhLXRhYmxlLWNvbHVtbi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBEYXRhVGFibGVDb21wb25lbnQgfSBmcm9tICcuLi9kYXRhLXRhYmxlL2RhdGEtdGFibGUuY29tcG9uZW50JztcclxuaW1wb3J0IHtcclxuICAgIEFwcGx5TW9kZSxcclxuICAgIFF1ZXJ5RGF0YSxcclxuICAgIFF1ZXJ5RGF0YUl0ZW0sXHJcbiAgICBRdWVyeURhdGFJdGVtUHJlc2V0T3B0aW9uQ29udGVudCxcclxuICAgIFF1ZXJ5RGF0YUl0ZW1WYWx1ZVR5cGUsXHJcbiAgICBRdWVyeURhdGFPcGVyYW5kXHJcbn0gZnJvbSAnLi9xdWVyeS1lZGl0b3ItY29udHJhY3QnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBRdWVyeUVkaXRvckRhdGFUYWJsZUNvbHVtbkxpc3RJdGVtIHtcclxuICAgIGxhYmVsOiBzdHJpbmc7XHJcbiAgICB2YWx1ZTogc3RyaW5nO1xyXG4gICAgcXVlcnlFZGl0b3JUeXBlOiBRdWVyeURhdGFJdGVtVmFsdWVUeXBlO1xyXG4gICAgcHJlc2V0T3B0aW9ucz86IFF1ZXJ5RGF0YUl0ZW1QcmVzZXRPcHRpb25Db250ZW50W107XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUXVlcnlFZGl0b3JDb2x1bW5Ecm9wZG93bkRhdGEge1xyXG4gICAgZmllbGQ6IHN0cmluZztcclxuICAgIGlzRHJvcGRvd246IGJvb2xlYW47XHJcbiAgICBxdWVyeUVkaXRvclR5cGU6IFF1ZXJ5RGF0YUl0ZW1WYWx1ZVR5cGU7XHJcbiAgICBvcHRpb25zPzogc3RyaW5nW107XHJcbiAgICBwcmVzZXRPcHRpb25zPzogUXVlcnlEYXRhSXRlbVByZXNldE9wdGlvbkNvbnRlbnRbXTtcclxufVxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnc21lLXF1ZXJ5LWVkaXRvcicsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vcXVlcnktZWRpdG9yLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgUXVlcnlFZGl0b3JDb21wb25lbnQgZXh0ZW5kcyBDb3JlQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICAgIHB1YmxpYyBxdWVyeUVkaXRvcjogUXVlcnlEYXRhO1xyXG4gICAgcHVibGljIGludGVybmFsQ29sdW1uTGlzdDogUXVlcnlFZGl0b3JEYXRhVGFibGVDb2x1bW5MaXN0SXRlbVtdO1xyXG4gICAgcHVibGljIG9wZXJhbmRzID0gW107XHJcbiAgICBwdWJsaWMgY29sdW1uc0Ryb3Bkb3duRGF0YTogQXJyYXk8UXVlcnlFZGl0b3JDb2x1bW5Ecm9wZG93bkRhdGE+ID0gW107XHJcbiAgICBwdWJsaWMgY29sdW1uRHJvcGRvd25EYXRhOiBBcnJheTxhbnk+ID0gW107XHJcbiAgICBwdWJsaWMgY29sdW1uRHJvcGRvd25GaWVsZDogc3RyaW5nO1xyXG4gICAgcHVibGljIGlzQ29sdW1uRHJvcGRvd25CdXN5OiBib29sZWFuO1xyXG4gICAgcHVibGljIGN1cnJlbnRNb2RpZnlpbmdJbmRleDogbnVtYmVyO1xyXG4gICAgcHVibGljIHJlc291cmNlU3RyaW5ncyA9IE1zZnRTbWUuZ2V0U3RyaW5nczxTdHJpbmdzPigpLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLlF1ZXJ5RWRpdG9yO1xyXG4gICAgcHVibGljIGlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgcHVibGljIHNlbGVjdGVkSHRtbDogSFRNTEVsZW1lbnQ7XHJcbiAgICBwdWJsaWMgcG9zdFNlbGVjdGVkSHRtbDogSFRNTEVsZW1lbnQ7XHJcbiAgICBwdWJsaWMgZ2V0IHF1ZXJ5RGF0YUl0ZW1WYWx1ZVR5cGUoKSB7XHJcbiAgICAgICAgcmV0dXJuIFF1ZXJ5RGF0YUl0ZW1WYWx1ZVR5cGU7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IHF1ZXJ5RGF0YU9wZXJhbmQoKSB7XHJcbiAgICAgICAgcmV0dXJuIFF1ZXJ5RGF0YU9wZXJhbmQ7XHJcbiAgICB9XHJcblxyXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLnJvbGUnKVxyXG4gICAgcHVibGljIGdldCByb2xlKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5xdWVyeUVkaXRvciB8fCAhdGhpcy5xdWVyeUVkaXRvci5jb250ZW50cykge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAnbWVudWJhcic7XHJcbiAgICB9XHJcblxyXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtbGFiZWwnKVxyXG4gICAgcHVibGljIGdldCBhcmlhTGFiZWwoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVzb3VyY2VTdHJpbmdzLkNvbHVtbkZpbHRlcjtcclxuICAgIH1cclxuXHJcbiAgICBAVmlld0NoaWxkKCdtdWx0aVNlbGVjdFRlbXBsYXRlJylcclxuICAgIHB1YmxpYyBtdWx0aVNlbGVjdFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxRdWVyeURhdGFJdGVtPjtcclxuXHJcbiAgICBAVmlld0NoaWxkKCd0ZXh0VGVtcGxhdGUnKVxyXG4gICAgcHVibGljIHRleHRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8UXVlcnlEYXRhSXRlbT47XHJcblxyXG4gICAgQFZpZXdDaGlsZCgnc2luZ2xlU2VsZWN0VGVtcGxhdGUnKVxyXG4gICAgcHVibGljIHNpbmdsZVNlbGVjdFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxRdWVyeURhdGFJdGVtPjtcclxuXHJcbiAgICBAVmlld0NoaWxkKCd0aW1lc3BhblNlbGVjdFRlbXBsYXRlJylcclxuICAgIHB1YmxpYyB0aW1lc3BhblNlbGVjdFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxRdWVyeURhdGFJdGVtPjtcclxuXHJcbiAgICBwcml2YXRlIGVuYWJsZUdldERhdGFUYWJsZVVuaXF1ZVZhbHVlcyA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBpc0ZvY3VzSW5zaWRlQ29tcG9uZW50ID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIGlzQ29tcG9uZW50Q2xpY2tlZCA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBzZWxlY3RlZEl0ZW06IFF1ZXJ5RGF0YUl0ZW07XHJcbiAgICBwcml2YXRlIGlzRWRpdGluZyA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBjaGVja1ZhbHVlRmllbGRUcnVuY2F0ZWRSZWNvcmRzID0gbmV3IEFycmF5KCk7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBhcHBseU1vZGU6IEFwcGx5TW9kZSA9IEFwcGx5TW9kZS5BY3RpdmU7XHJcblxyXG4gICAgcHJpdmF0ZSBpbnRlcm5hbFByZXNldFF1ZXJ5RWRpdG9yO1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBzZXQgcHJlc2V0UXVlcnlFZGl0b3IoaW5wdXQ6IFF1ZXJ5RGF0YSkge1xyXG4gICAgICAgIHRoaXMuaW50ZXJuYWxQcmVzZXRRdWVyeUVkaXRvciA9IGlucHV0O1xyXG4gICAgICAgIHRoaXMudXBkYXRlUHJlc2V0UXVlcnlFZGl0b3JDdXN0b21MYWJlbHMoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IHByZXNldFF1ZXJ5RWRpdG9yKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmludGVybmFsUHJlc2V0UXVlcnlFZGl0b3I7XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBzaG93QWRkQnV0dG9uID0gdHJ1ZTtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHNob3dSZXNldEJ1dHRvbiA9IHRydWU7XHJcblxyXG4gICAgcHVibGljIGRpc2FibGVSZXNldEJ1dHRvbiA9IGZhbHNlO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgZGF0YVRhYmxlOiBEYXRhVGFibGVDb21wb25lbnQ7XHJcblxyXG4gICAgcHJvdGVjdGVkIGdldCBsb2dTb3VyY2VOYW1lKCkge1xyXG4gICAgICAgIHJldHVybiAnUXVlcnlFZGl0b3JDb21wb25lbnQnO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IGRpc2FibGVSZXNldEJ1dHRvbiB2YWx1ZVxyXG4gICAgICogZGlzYWJsZVJlc2V0QnV0dG9uID0gdHJ1ZSBpZiBxdWVyeUVkaXRvci5jb250ZW50cyA9PSAwXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgc2V0RGlzYWJsZVJlc2V0QnV0dG9uKCk6IHZvaWQge1xyXG4gICAgICAgIGlmIChNc2Z0U21lLmlzTnVsbE9yVW5kZWZpbmVkKHRoaXMucXVlcnlFZGl0b3IpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZVJlc2V0QnV0dG9uID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmRpc2FibGVSZXNldEJ1dHRvbiA9IHRoaXMucXVlcnlFZGl0b3IuY29udGVudHMubGVuZ3RoID09PSAwO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5pbml0aWFsaXplT3BlcmFuZHNMaXN0KCk7XHJcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xyXG5cclxuICAgICAgICAvLyBTZXQgZGlzYWJsZVJlc2V0QnV0dG9uIHZhbHVlXHJcbiAgICAgICAgdGhpcy5zZXREaXNhYmxlUmVzZXRCdXR0b24oKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7IH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0VGVtcGxhdGUoaXRlbTogUXVlcnlEYXRhSXRlbSkge1xyXG4gICAgICAgIHN3aXRjaCAoaXRlbS52YWx1ZS50eXBlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgUXVlcnlEYXRhSXRlbVZhbHVlVHlwZS5NdWx0aVNlbGVjdERyb3Bkb3duOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubXVsdGlTZWxlY3RUZW1wbGF0ZTtcclxuICAgICAgICAgICAgY2FzZSBRdWVyeURhdGFJdGVtVmFsdWVUeXBlLlNpbmdsZURyb3Bkb3duOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2luZ2xlU2VsZWN0VGVtcGxhdGU7XHJcbiAgICAgICAgICAgIGNhc2UgUXVlcnlEYXRhSXRlbVZhbHVlVHlwZS5UaW1lc3BhbkRyb3Bkb3duOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudGltZXNwYW5TZWxlY3RUZW1wbGF0ZTtcclxuICAgICAgICAgICAgY2FzZSBRdWVyeURhdGFJdGVtVmFsdWVUeXBlLlRleHRJbnB1dDpcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRleHRUZW1wbGF0ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEl0ZW1EaXNwbGF5VmFsdWUoaXRlbTogUXVlcnlEYXRhSXRlbSkge1xyXG4gICAgICAgIHN3aXRjaCAoaXRlbS52YWx1ZS50eXBlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgUXVlcnlEYXRhSXRlbVZhbHVlVHlwZS5NdWx0aVNlbGVjdERyb3Bkb3duOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVzb3VyY2VTdHJpbmdzLlNlbGVjdGVkLmZvcm1hdChpdGVtLnZhbHVlLnZhbHVlLmxlbmd0aCk7XHJcbiAgICAgICAgICAgIGNhc2UgUXVlcnlEYXRhSXRlbVZhbHVlVHlwZS5TaW5nbGVEcm9wZG93bjpcclxuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLnZhbHVlLnZhbHVlO1xyXG4gICAgICAgICAgICBjYXNlIFF1ZXJ5RGF0YUl0ZW1WYWx1ZVR5cGUuVGV4dElucHV0OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0udmFsdWUudmFsdWU7XHJcbiAgICAgICAgICAgIGNhc2UgUXVlcnlEYXRhSXRlbVZhbHVlVHlwZS5UaW1lc3BhbkRyb3Bkb3duOlxyXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0udmFsdWUudmFsdWUgJiYgT2JqZWN0LmtleXMoaXRlbS52YWx1ZS52YWx1ZSkubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLnZhbHVlLmN1c3RvbURpc3BsYXlMYWJlbCA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0udmFsdWUuY3VzdG9tRGlzcGxheUxhYmVsIDogdGhpcy5zdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkZvcm0uRGF0ZVRpbWVSYW5nZS5DdXN0b20ubGFiZWw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRJdGVtT3BlcmF0b3JEaXNwbGF5VmFsdWUoaXRlbTogUXVlcnlEYXRhSXRlbSkge1xyXG4gICAgICAgIHN3aXRjaCAoaXRlbS52YWx1ZS50eXBlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgUXVlcnlEYXRhSXRlbVZhbHVlVHlwZS5NdWx0aVNlbGVjdERyb3Bkb3duOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucXVlcnlEYXRhT3BlcmFuZC5Ecm9wZG93bnM7XHJcbiAgICAgICAgICAgIGNhc2UgUXVlcnlEYXRhSXRlbVZhbHVlVHlwZS5TaW5nbGVEcm9wZG93bjpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnF1ZXJ5RGF0YU9wZXJhbmQuRHJvcGRvd25zO1xyXG4gICAgICAgICAgICBjYXNlIFF1ZXJ5RGF0YUl0ZW1WYWx1ZVR5cGUuVGltZXNwYW5Ecm9wZG93bjpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnF1ZXJ5RGF0YU9wZXJhbmQuRHJvcGRvd25zO1xyXG4gICAgICAgICAgICBjYXNlIFF1ZXJ5RGF0YUl0ZW1WYWx1ZVR5cGUuVGV4dElucHV0OlxyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0ub3BlcmFuZDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRVbmlxdWVUYWJsZVZhbHVlKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmRhdGFUYWJsZSAmJiB0aGlzLmRhdGFUYWJsZS5pdGVtcykge1xyXG4gICAgICAgICAgICB0aGlzLmNvbHVtbnNEcm9wZG93bkRhdGEuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICAgIC8vIElnbm9yZSBkaXNhYmxlZCBvbmVzXHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5xdWVyeUVkaXRvclR5cGUgPT09IHRoaXMucXVlcnlEYXRhSXRlbVZhbHVlVHlwZS5EaXNhYmxlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uc0Ryb3Bkb3duRGF0YVtpbmRleF0ub3B0aW9ucyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0ucXVlcnlFZGl0b3JUeXBlID09PSBRdWVyeURhdGFJdGVtVmFsdWVUeXBlLlNpbmdsZURyb3Bkb3duIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5xdWVyeUVkaXRvclR5cGUgPT09IFF1ZXJ5RGF0YUl0ZW1WYWx1ZVR5cGUuTXVsdGlTZWxlY3REcm9wZG93biB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0ucXVlcnlFZGl0b3JUeXBlID09PSBRdWVyeURhdGFJdGVtVmFsdWVUeXBlLlRpbWVzcGFuRHJvcGRvd24pIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBHdWFyYW50ZWUgaWYgdGhlcmUgYXJlIGFscmVhZHkgZXhpc3RlZCBwcmVzZXQgb3B0aW9ucyBmb3IgdGltZXNwYW4gZHJvcGRvd25cclxuICAgICAgICAgICAgICAgICAgICAvLyBPbmx5IGRpc3BsYXkgdGhlIHByZXNldCBvbmVzO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbHVtbnNEcm9wZG93bkRhdGFbaW5kZXhdICYmIHRoaXMuY29sdW1uc0Ryb3Bkb3duRGF0YVtpbmRleF0ucHJlc2V0T3B0aW9uc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiB0aGlzLmNvbHVtbnNEcm9wZG93bkRhdGFbaW5kZXhdLnByZXNldE9wdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBsb29wMTpcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZGF0YVRhYmxlLml0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvdyA9IHRoaXMuZGF0YVRhYmxlLml0ZW1zW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWVsZCA9IGl0ZW0uZmllbGQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGV4dGVuZCB0byBzdXBwb3J0IG5lc3RlZCBmaWVsZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXN0ZWRTdHJ1Y3R1cmUgPSBmaWVsZC5zcGxpdCgnLicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGFyZ2V0ID0gcm93O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG5lc3RlZFN0cnVjdHVyZS5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0dXJlID0gbmVzdGVkU3RydWN0dXJlW2pdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQgPSB0YXJnZXRbc3RydWN0dXJlXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2dnaW5nLmxvZyh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsOiBMb2dMZXZlbC5FcnJvcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ0Vycm9yIHBhcnNpbmcgdGhlIG5lc3RlZDogJyArIGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZTogJ1F1ZXJ5RWRpdG9yQ29tcG9uZW50LmdldFVuaXF1ZVRhYmxlVmFsdWUnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbG9vcDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3VwcG9ydHMgd2l0aCBvbmUgZGF0YSBtb2RlbCBwcm9wZXJ0eSBiZWluZyB1c2VkIGFjcm9zcyBkaWZmZXJlbnQgZGF0YXRhYmxlIGNvbHVtbnNcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldCAmJiAhdGhpcy5jb2x1bW5zRHJvcGRvd25EYXRhW2luZGV4XS5vcHRpb25zLmluY2x1ZGVzKHRhcmdldCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uc0Ryb3Bkb3duRGF0YVtpbmRleF0ub3B0aW9ucy5wdXNoKHRhcmdldCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHNldCBjb2x1bW5MaXN0KGNvbHVtbkxpc3Q6IFF1ZXJ5TGlzdDxEYXRhVGFibGVDb2x1bW5Db21wb25lbnQ+KSB7XHJcbiAgICAgICAgaWYgKGNvbHVtbkxpc3QpIHtcclxuICAgICAgICAgICAgLy8gSWYgY29sdW1uIGFwcGxpZWQgUXVlcnlEYXRhSXRlbVZhbHVlVHlwZS5EaXNhYmxlZCB3aWxsIG5vdCBiZSBhYmxlIHRvIGZpbHRlciB3aXRoXHJcbiAgICAgICAgICAgIHRoaXMuaW50ZXJuYWxDb2x1bW5MaXN0ID0gdGhpcy5jb2x1bW5MaXN0Q29uc3RydWN0b3IoY29sdW1uTGlzdC50b0FycmF5KCkpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pbnRlcm5hbENvbHVtbkxpc3QpIHtcclxuICAgICAgICAgICAgICAgIGxldCBzaG91bGRFbmFibGVHZXREYXRhVGFibGVVbmlxdWVWYWx1ZXMgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5pbnRlcm5hbENvbHVtbkxpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB0eXBlID0gdGhpcy5pbnRlcm5hbENvbHVtbkxpc3RbaV0ucXVlcnlFZGl0b3JUeXBlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSBRdWVyeURhdGFJdGVtVmFsdWVUeXBlLlNpbmdsZURyb3Bkb3duXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCB0eXBlID09PSBRdWVyeURhdGFJdGVtVmFsdWVUeXBlLk11bHRpU2VsZWN0RHJvcGRvd25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHR5cGUgPT09IFF1ZXJ5RGF0YUl0ZW1WYWx1ZVR5cGUuVGltZXNwYW5Ecm9wZG93bikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0OiBRdWVyeUVkaXRvckNvbHVtbkRyb3Bkb3duRGF0YSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogdGhpcy5pbnRlcm5hbENvbHVtbkxpc3RbaV0udmFsdWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNEcm9wZG93bjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeUVkaXRvclR5cGU6IHR5cGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gUXVlcnlEYXRhSXRlbVZhbHVlVHlwZS5UaW1lc3BhbkRyb3Bkb3duKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogZm9yIG5vdyBvbmx5IGFsbG93IHVzZXIgdG8gdXNlIHByZXNldCBhbmQgY3VzdG9tIGRhdGVwaWNrZXJzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTGF0ZXIgb24gY2FuIHVwZ3JhZGUgdG8gc3VwcG9ydCB1c2luZyB1bmlxdWUgdGltZXN0YW1wcyBmcm9tIHRoZSBkYXRhdGFibGUgY29sdW1uc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC5wcmVzZXRPcHRpb25zID0gdGhpcy5pbnRlcm5hbENvbHVtbkxpc3RbaV0ucHJlc2V0T3B0aW9ucztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uc0Ryb3Bkb3duRGF0YS5wdXNoKHRhcmdldCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNob3VsZEVuYWJsZUdldERhdGFUYWJsZVVuaXF1ZVZhbHVlcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZEVuYWJsZUdldERhdGFUYWJsZVVuaXF1ZVZhbHVlcyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gUXVlcnlEYXRhSXRlbVZhbHVlVHlwZS5UZXh0SW5wdXQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uc0Ryb3Bkb3duRGF0YS5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogdGhpcy5pbnRlcm5hbENvbHVtbkxpc3RbaV0udmFsdWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNEcm9wZG93bjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlFZGl0b3JUeXBlOiB0eXBlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBRdWVyeURhdGFJdGVtVmFsdWVUeXBlLkRpc2FibGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG91bGRFbmFibGVHZXREYXRhVGFibGVVbmlxdWVWYWx1ZXMgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoc2hvdWxkRW5hYmxlR2V0RGF0YVRhYmxlVW5pcXVlVmFsdWVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmFibGVHZXREYXRhVGFibGVVbmlxdWVWYWx1ZXMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0VW5pcXVlVGFibGVWYWx1ZSgpO1xyXG4gICAgICAgICAgICB0aGlzLnJlc2V0UXVlcnlFZGl0b3IoKTtcclxuICAgICAgICAgICAgdGhpcy5hcHBseVRtcFRleHRWYWx1ZVRvVmFsdWUoKTtcclxuICAgICAgICAgICAgdGhpcy5xdWVyeUVkaXRvciA9IHRoaXMudmFsaWRhdGVRdWVyeUVkaXRvcigpO1xyXG4gICAgICAgICAgICB0aGlzLmFwcGx5UXVlcnlFZGl0b3JUb0RhdGF0YWJsZSgpO1xyXG4gICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBARGVib3VuY2UoKVxyXG4gICAgcHVibGljIG9uUXVlcnlFZGl0b3JDaGFuZ2UoaW5kZXg6IG51bWJlciwgaXNDb2x1bW5VcGRhdGU/OiBib29sZWFuLCBuZWVkc1VwZGF0ZUlzVmFsaWQ/OiBib29sZWFuLCBpc09wZXJhdG9yVXBkYXRlPzogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmRhdGFUYWJsZSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5xdWVyeUVkaXRvciAmJiB0aGlzLnF1ZXJ5RWRpdG9yLmNvbnRlbnRzICYmIHRoaXMucXVlcnlFZGl0b3IuY29udGVudHMubGVuZ3RoXHJcbiAgICAgICAgICAgICAgICAmJiB0aGlzLnF1ZXJ5RWRpdG9yLmNvbnRlbnRzW2luZGV4XVxyXG4gICAgICAgICAgICAgICAgJiYgIU1zZnRTbWUuaXNOdWxsT3JXaGl0ZVNwYWNlKHRoaXMucXVlcnlFZGl0b3IuY29udGVudHNbaW5kZXhdLmNvbHVtbi52YWx1ZSkpIHtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW5zRHJvcGRvd25EYXRhSXRlbSA9IHRoaXMuY29sdW1uc0Ryb3Bkb3duRGF0YS5maW5kKChpKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGkuZmllbGQgPT09IHRoaXMuc2VsZWN0ZWRJdGVtLmNvbHVtbi52YWx1ZTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChuZWVkc1VwZGF0ZUlzVmFsaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEl0ZW0udmFsdWUuaXNWYWx1ZVVuc2V0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtLnZhbHVlLmlzVmFsdWVVbnNldCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5hcHBseU1vZGUgPT09IEFwcGx5TW9kZS5BY3RpdmUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRVbnNldFByb3BlcnR5KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0RWRpdGluZ0l0ZW1WYWxpZFByb3BlcnR5KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXBwbHlUbXBUZXh0VmFsdWVUb1ZhbHVlKHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBxdWVyeUVkaXRvciA9IHRoaXMudmFsaWRhdGVRdWVyeUVkaXRvcigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcGx5UXVlcnlFZGl0b3JUb0RhdGF0YWJsZShxdWVyeUVkaXRvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVF1ZXJ5RWRpdG9yTGFiZWwodGhpcy5zZWxlY3RlZEl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvbHVtbnNEcm9wZG93bkRhdGFJdGVtLnF1ZXJ5RWRpdG9yVHlwZSA9PT0gUXVlcnlEYXRhSXRlbVZhbHVlVHlwZS5TaW5nbGVEcm9wZG93biB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbnNEcm9wZG93bkRhdGFJdGVtLnF1ZXJ5RWRpdG9yVHlwZSA9PT0gUXVlcnlEYXRhSXRlbVZhbHVlVHlwZS5NdWx0aVNlbGVjdERyb3Bkb3duKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0udmFsdWUudHlwZSA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbnNEcm9wZG93bkRhdGFJdGVtLnF1ZXJ5RWRpdG9yVHlwZSA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5zRHJvcGRvd25EYXRhSXRlbS5xdWVyeUVkaXRvclR5cGUgOiBRdWVyeURhdGFJdGVtVmFsdWVUeXBlLlNpbmdsZURyb3Bkb3duO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZW5hYmxlR2V0RGF0YVRhYmxlVW5pcXVlVmFsdWVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxlR2V0RGF0YVRhYmxlVW5pcXVlVmFsdWVzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzQ29sdW1uVXBkYXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNDb2x1bW5Ecm9wZG93bkJ1c3kgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbHVtbkRyb3Bkb3duRmllbGQgPSBjb2x1bW5zRHJvcGRvd25EYXRhSXRlbS5maWVsZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0ub3BlcmFuZCA9IFF1ZXJ5RGF0YU9wZXJhbmQuRXE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2x1bW5zRHJvcGRvd25EYXRhSXRlbS5xdWVyeUVkaXRvclR5cGUgPT09IFF1ZXJ5RGF0YUl0ZW1WYWx1ZVR5cGUuU2luZ2xlRHJvcGRvd24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRJdGVtVmFsdWUodGhpcy5zZWxlY3RlZEl0ZW0sICcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtLnZhbHVlLnNlYXJjaGFibGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbnNEcm9wZG93bkRhdGFJdGVtLnF1ZXJ5RWRpdG9yVHlwZSA9PT0gUXVlcnlEYXRhSXRlbVZhbHVlVHlwZS5NdWx0aVNlbGVjdERyb3Bkb3duKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFNlbGVjdGVkSXRlbVZhbHVlKHRoaXMuc2VsZWN0ZWRJdGVtLCBbXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbS52YWx1ZS5zZWFyY2hhYmxlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtLnZhbHVlLnNlYXJjaGFibGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVDb2x1bW5Ecm9wZG93bkRhdGEoY29sdW1uc0Ryb3Bkb3duRGF0YUl0ZW0uZmllbGQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29sdW1uc0Ryb3Bkb3duRGF0YUl0ZW0ucXVlcnlFZGl0b3JUeXBlID09PSBRdWVyeURhdGFJdGVtVmFsdWVUeXBlLlRleHRJbnB1dCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtLnZhbHVlLnR5cGUgPSBRdWVyeURhdGFJdGVtVmFsdWVUeXBlLlRleHRJbnB1dDtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29sdW1uc0Ryb3Bkb3duRGF0YUl0ZW0ucXVlcnlFZGl0b3JUeXBlID09PSBRdWVyeURhdGFJdGVtVmFsdWVUeXBlLlRpbWVzcGFuRHJvcGRvd24pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbS52YWx1ZS50eXBlID0gUXVlcnlEYXRhSXRlbVZhbHVlVHlwZS5UaW1lc3BhbkRyb3Bkb3duO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0NvbHVtblVwZGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbS5vcGVyYW5kID0gUXVlcnlEYXRhT3BlcmFuZC5FcTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTZWxlY3RlZEl0ZW1WYWx1ZSh0aGlzLnNlbGVjdGVkSXRlbSwgbmV3IERhdGVSYW5nZSgpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0udmFsdWUuc2VhcmNoYWJsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbHVtbkRyb3Bkb3duRGF0YShjb2x1bW5zRHJvcGRvd25EYXRhSXRlbS5maWVsZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtLnZhbHVlLmN1c3RvbURpc3BsYXlMYWJlbCA9IHRoaXMuc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Gb3JtLkRhdGVUaW1lUmFuZ2UuQ3VzdG9tLmxhYmVsO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoaXNPcGVyYXRvclVwZGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkSXRlbS52YWx1ZS50eXBlID09PSBRdWVyeURhdGFJdGVtVmFsdWVUeXBlLlRleHRJbnB1dCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5hcHBseU1vZGUgPT09IEFwcGx5TW9kZS5BY3RpdmUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VW5zZXRQcm9wZXJ0eSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRFZGl0aW5nSXRlbVZhbGlkUHJvcGVydHkoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXBwbHlUbXBUZXh0VmFsdWVUb1ZhbHVlKHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcXVlcnlFZGl0b3IgPSB0aGlzLnZhbGlkYXRlUXVlcnlFZGl0b3IoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXBwbHlRdWVyeUVkaXRvclRvRGF0YXRhYmxlKHF1ZXJ5RWRpdG9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29sdW1uc0Ryb3Bkb3duRGF0YUl0ZW0ucXVlcnlFZGl0b3JUeXBlID09PSBRdWVyeURhdGFJdGVtVmFsdWVUeXBlLlNpbmdsZURyb3Bkb3duIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbnNEcm9wZG93bkRhdGFJdGVtLnF1ZXJ5RWRpdG9yVHlwZSA9PT0gUXVlcnlEYXRhSXRlbVZhbHVlVHlwZS5NdWx0aVNlbGVjdERyb3Bkb3duKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtLm9wZXJhbmQgPSBRdWVyeURhdGFPcGVyYW5kLkVxO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gU2V0IGRpc2FibGVSZXNldEJ1dHRvbiB2YWx1ZVxyXG4gICAgICAgIHRoaXMuc2V0RGlzYWJsZVJlc2V0QnV0dG9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB1cGRhdGVDb2x1bW5Ecm9wZG93bkRhdGEoZmllbGQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbHVtbnNEcm9wZG93bkRhdGEpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXMuY29sdW1uc0Ryb3Bkb3duRGF0YS5maWx0ZXIoKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5maWVsZCA9PT0gZmllbGQ7XHJcbiAgICAgICAgICAgICAgICB9KVswXTtcclxuICAgICAgICAgICAgICAgIGlmICh0YXJnZXQpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0LnByZXNldE9wdGlvbnMgJiYgdGFyZ2V0LnByZXNldE9wdGlvbnMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uRHJvcGRvd25EYXRhID0gdGFyZ2V0LnByZXNldE9wdGlvbnM7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0YXJnZXQub3B0aW9ucyAmJiB0YXJnZXQub3B0aW9ucy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2x1bW5Ecm9wZG93bkRhdGEgPSB0YXJnZXQub3B0aW9ucztcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbHVtbkRyb3Bkb3duRGF0YSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2x1bW5Ecm9wZG93bkRhdGEgPSBbXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNDb2x1bW5Ecm9wZG93bkJ1c3kgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHJlamVjdCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuaXNDb2x1bW5Ecm9wZG93bkJ1c3kgPSBmYWxzZTtcclxuICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIEBIb3N0TGlzdGVuZXIoJ21vdXNldXAnKVxyXG4gICAgbW91c2V1cEluc2lkZSgpIHtcclxuICAgICAgICB0aGlzLmlzRm9jdXNJbnNpZGVDb21wb25lbnQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuaXNDb21wb25lbnRDbGlja2VkID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDptb3VzZXVwJylcclxuICAgIG1vdXNldXBPdXQoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzRm9jdXNJbnNpZGVDb21wb25lbnQgJiYgdGhpcy5pc0NvbXBvbmVudENsaWNrZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5hcHBseVdvcmtmbG93KCk7XHJcbiAgICAgICAgICAgIHRoaXMuaXNDb21wb25lbnRDbGlja2VkID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaXNGb2N1c0luc2lkZUNvbXBvbmVudCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIEBEZWJvdW5jZSgpXHJcbiAgICBwdWJsaWMgb25WYWx1ZUZpZWxkRW50ZXJLZXlkb3duKCRldmVudCwgaW5kZXgpOiB2b2lkIHtcclxuICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICBpZiAodGhpcy5xdWVyeUVkaXRvci5jb250ZW50cyAmJiB0aGlzLnF1ZXJ5RWRpdG9yLmNvbnRlbnRzW2luZGV4XSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5xdWVyeUVkaXRvci5jb250ZW50c1tpbmRleF0uaXNFZGl0aW5nKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGx5V29ya2Zsb3coKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNPblNlbGVjdGVkSHRtbCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIEBEZWJvdW5jZSgpXHJcbiAgICBwcml2YXRlIGZvY3VzT25TZWxlY3RlZEh0bWwoKSB7XHJcbiAgICAgICAgbGV0IHNlbGVjdEZyb21BZGRCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEh0bWwuY2xhc3NMaXN0ICYmIHRoaXMuc2VsZWN0ZWRIdG1sLmNsYXNzTmFtZS5pbmNsdWRlcygnc21lLXF1ZXJ5LWVkaXRvci1uZXctaXRlbScpKSB7XHJcbiAgICAgICAgICAgIHNlbGVjdEZyb21BZGRCdXR0b24gPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmZvY3VzT25TZWxlY3RlZEh0bWxIZWxwZXIoc2VsZWN0RnJvbUFkZEJ1dHRvbik7XHJcbiAgICB9XHJcblxyXG4gICAgQFlpZWxkKClcclxuICAgIHByaXZhdGUgZm9jdXNPblNlbGVjdGVkSHRtbEhlbHBlcihzZWxlY3RGcm9tQWRkQnV0dG9uOiBib29sZWFuKSB7XHJcbiAgICAgICAgaWYgKHNlbGVjdEZyb21BZGRCdXR0b24pIHtcclxuICAgICAgICAgICAgY29uc3QgZCA9IERvbTtcclxuICAgICAgICAgICAgY29uc3QgdG1wU2VsZWN0ZWRJdGVtID0gZC5nZXRQcmV2aW91c0ZvY3VzYWJsZUVsZW1lbnQodGhpcy5zZWxlY3RlZEh0bWwpO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSHRtbCA9IHRtcFNlbGVjdGVkSXRlbTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRIdG1sKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSHRtbC5mb2N1cygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRIdG1sKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSHRtbC5mb2N1cygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvblBpbGxFbnRlclRyYXAoJGV2ZW50LCBpdGVtOiBRdWVyeURhdGFJdGVtLCBpbmRleDogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYgKCEoJGV2ZW50LnRhcmdldCAmJiAkZXZlbnQudGFyZ2V0ICYmICRldmVudC50YXJnZXQudHlwZSAmJiAkZXZlbnQudGFyZ2V0LnR5cGUudG9Mb3dlckNhc2UoKSA9PT0gJ2J1dHRvbicpKSB7XHJcbiAgICAgICAgICAgIHRoaXMub25QaWxsQ2xpY2soaXRlbSwgaW5kZXgpO1xyXG4gICAgICAgICAgICB0aGlzLmZvY3VzT25FbGVtZW50SW5UcmFwKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaXNGb2N1c0luc2lkZUNvbXBvbmVudCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5pc0NvbXBvbmVudENsaWNrZWQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIEBZaWVsZCgpXHJcbiAgICBwcml2YXRlIGZvY3VzT25FbGVtZW50SW5UcmFwKCkge1xyXG4gICAgICAgIGNvbnN0IG5leHRGb2N1c2FibGVFbGVtZW50SW5UcmFwID0gRG9tLmdldE5leHRGb2N1c2FibGVFbGVtZW50SW5UcmFwKHRoaXMuc2VsZWN0ZWRIdG1sKTtcclxuICAgICAgICBpZiAobmV4dEZvY3VzYWJsZUVsZW1lbnRJblRyYXApIHtcclxuICAgICAgICAgICAgbmV4dEZvY3VzYWJsZUVsZW1lbnRJblRyYXAuZm9jdXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgQERlYm91bmNlKClcclxuICAgIHB1YmxpYyBvblBpbGxFeGl0VHJhcCgkZXZlbnQpIHtcclxuICAgICAgICBpZiAoISgkZXZlbnQua2V5Q29kZSA9PT0gMTMgJiYgJGV2ZW50LnRhcmdldCAmJiAkZXZlbnQudGFyZ2V0LnR5cGUudG9Mb3dlckNhc2UoKSA9PT0gJ2J1dHRvbicpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXBwbHlXb3JrZmxvdygpO1xyXG4gICAgICAgICAgICB0aGlzLmZvY3VzT25TZWxlY3RlZEh0bWwoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pc0ZvY3VzSW5zaWRlQ29tcG9uZW50ID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc0NvbXBvbmVudENsaWNrZWQgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25QaWxsQ2xpY2soaXRlbTogUXVlcnlEYXRhSXRlbSwgaW5kZXg6IG51bWJlcikge1xyXG4gICAgICAgIGlmICh0aGlzLmlzRWRpdGluZykge1xyXG4gICAgICAgICAgICB0aGlzLmFwcGx5V29ya2Zsb3coKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0gPSB0aGlzLnF1ZXJ5RWRpdG9yLmNvbnRlbnRzW2luZGV4XTtcclxuICAgICAgICBpZiAoIWl0ZW0uZGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgaWYgKGl0ZW0udmFsdWUudHlwZSAhPT0gUXVlcnlEYXRhSXRlbVZhbHVlVHlwZS5UZXh0SW5wdXQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQ29sdW1uRHJvcGRvd25EYXRhKGl0ZW0uY29sdW1uLnZhbHVlKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldElzRWRpdGluZyhpdGVtLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRNb2RpZnlpbmdJbmRleCA9IGluZGV4O1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldElzRWRpdGluZyhpdGVtLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudE1vZGlmeWluZ0luZGV4ID0gaW5kZXg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFwcGx5VG1wVGV4dFZhbHVlVG9WYWx1ZShkb05vdFNldFRlbXBvcmFyeVRvRmFsc2U/OiBib29sZWFuKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGF0YVRhYmxlKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnF1ZXJ5RWRpdG9yICYmIHRoaXMucXVlcnlFZGl0b3IuY29udGVudHMgJiYgdGhpcy5xdWVyeUVkaXRvci5jb250ZW50cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlUXVlcnlFZGl0b3JMYWJlbCh0aGlzLnNlbGVjdGVkSXRlbSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5zZWxlY3RlZEl0ZW07XHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRJdGVtVmFsdWUoaXRlbSwgaXRlbS52YWx1ZS50ZW1wb3JhcnlWYWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFkb05vdFNldFRlbXBvcmFyeVRvRmFsc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRJc0VkaXRpbmcodGhpcy5zZWxlY3RlZEl0ZW0sIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhcHBseVdvcmtmbG93KCkge1xyXG4gICAgICAgIHRoaXMuc2V0VW5zZXRQcm9wZXJ0eSgpO1xyXG4gICAgICAgIHRoaXMuc2V0RWRpdGluZ0l0ZW1WYWxpZFByb3BlcnR5KCk7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJVbnNldFZhbHVlSXRlbUFuZFNldEludmFsaWQoKTtcclxuICAgICAgICB0aGlzLmFwcGx5VG1wVGV4dFZhbHVlVG9WYWx1ZSgpO1xyXG4gICAgICAgIGlmICh0aGlzLmFwcGx5TW9kZSA9PT0gQXBwbHlNb2RlLkxhenkpIHtcclxuICAgICAgICAgICAgY29uc3QgcXVlcnlFZGl0b3IgPSB0aGlzLnZhbGlkYXRlUXVlcnlFZGl0b3IoKTtcclxuICAgICAgICAgICAgdGhpcy5hcHBseVF1ZXJ5RWRpdG9yVG9EYXRhdGFibGUocXVlcnlFZGl0b3IpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHZhbGlkYXRlUXVlcnlFZGl0b3IoaW5kZXg/OiBudW1iZXIpIHtcclxuICAgICAgICBjb25zdCByZXMgPSB7XHJcbiAgICAgICAgICAgIGNvbnRlbnRzOiBuZXcgQXJyYXk8UXVlcnlEYXRhSXRlbT4oKVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKHRoaXMucXVlcnlFZGl0b3IuY29udGVudHMgJiYgdGhpcy5xdWVyeUVkaXRvci5jb250ZW50cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgaWYgKGluZGV4ID49IDApIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLnNlbGVjdGVkSXRlbTtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFNc2Z0U21lLmlzTnVsbE9yV2hpdGVTcGFjZShpdGVtLmNvbHVtbi52YWx1ZSkgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgISh0eXBlb2YgaXRlbS52YWx1ZS52YWx1ZSA9PT0gJ3N0cmluZycgJiYgTXNmdFNtZS5pc051bGxPcldoaXRlU3BhY2UoaXRlbS52YWx1ZS52YWx1ZSkpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICEodHlwZW9mIGl0ZW0udmFsdWUudmFsdWUgPT09ICdvYmplY3QnICYmICFpdGVtLnZhbHVlLnZhbHVlLmxlbmd0aCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzLmNvbnRlbnRzLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS52YWx1ZS5pc1ZhbHVlVW5zZXQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucXVlcnlFZGl0b3IuY29udGVudHMuZm9yRWFjaCgoaXRlbTogUXVlcnlEYXRhSXRlbSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghTXNmdFNtZS5pc051bGxPcldoaXRlU3BhY2UoaXRlbS5jb2x1bW4udmFsdWUpICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICEodHlwZW9mIGl0ZW0udmFsdWUudmFsdWUgPT09ICdzdHJpbmcnICYmIE1zZnRTbWUuaXNOdWxsT3JXaGl0ZVNwYWNlKGl0ZW0udmFsdWUudmFsdWUpKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAhKHR5cGVvZiBpdGVtLnZhbHVlLnZhbHVlID09PSAnb2JqZWN0JyAmJiAhaXRlbS52YWx1ZS52YWx1ZS5sZW5ndGgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcy5jb250ZW50cy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0udmFsdWUuaXNWYWx1ZVVuc2V0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhcHBseVF1ZXJ5RWRpdG9yVG9EYXRhdGFibGUoaW5wdXQ/OiBRdWVyeURhdGEpIHtcclxuICAgICAgICBpZiAodGhpcy5kYXRhVGFibGUpIHtcclxuICAgICAgICAgICAgdGhpcy5kYXRhVGFibGUuYXBwbHlRdWVyeUVkaXRvcihpbnB1dCA/IGlucHV0IDogdGhpcy5xdWVyeUVkaXRvcik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBuZXdRdWVyeUVkaXRvcigkZXZlbnQsIGlzS2V5RW50ZXJQcmVzc2VkPzogYm9vbGVhbikge1xyXG4gICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIHRoaXMuaXNDb21wb25lbnRDbGlja2VkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc0ZvY3VzSW5zaWRlQ29tcG9uZW50ID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNFZGl0aW5nKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXBwbHlXb3JrZmxvdygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnF1ZXJ5RWRpdG9yLmNvbnRlbnRzLnB1c2godGhpcy5uZXdRdWVyeUVkaXRvckhlbHBlcignJywgJycpKTtcclxuICAgICAgICB0aGlzLmlzRWRpdGluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0gPSB0aGlzLnF1ZXJ5RWRpdG9yLmNvbnRlbnRzW3RoaXMucXVlcnlFZGl0b3IuY29udGVudHMubGVuZ3RoIC0gMV07XHJcblxyXG4gICAgICAgIGlmIChpc0tleUVudGVyUHJlc3NlZCkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSHRtbCA9IDxIVE1MRWxlbWVudD5ldmVudC50YXJnZXQ7XHJcbiAgICAgICAgICAgIHRoaXMuZm9jdXNPbk5ld1F1ZXJ5UGlsbCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gU2V0IGRpc2FibGVSZXNldEJ1dHRvbiB2YWx1ZVxyXG4gICAgICAgIHRoaXMuc2V0RGlzYWJsZVJlc2V0QnV0dG9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgQFlpZWxkKClcclxuICAgIHByaXZhdGUgZm9jdXNPbk5ld1F1ZXJ5UGlsbCgpIHtcclxuICAgICAgICBjb25zdCBkID0gRG9tO1xyXG4gICAgICAgIGNvbnN0IGxhc3RGb2N1c2FibGVQaWxsUmVtb3ZlQnV0dG9uID0gZC5nZXRQcmV2aW91c0ZvY3VzYWJsZUVsZW1lbnQodGhpcy5zZWxlY3RlZEh0bWwpO1xyXG4gICAgICAgIGlmIChsYXN0Rm9jdXNhYmxlUGlsbFJlbW92ZUJ1dHRvbikge1xyXG4gICAgICAgICAgICBjb25zdCBsYXN0Rm9jdXNhYmxlUGlsbEtleURyb3Bkb3duID0gZC5nZXRQcmV2aW91c0ZvY3VzYWJsZUVsZW1lbnRJblRyYXAobGFzdEZvY3VzYWJsZVBpbGxSZW1vdmVCdXR0b24pO1xyXG4gICAgICAgICAgICBpZiAobGFzdEZvY3VzYWJsZVBpbGxLZXlEcm9wZG93bikge1xyXG4gICAgICAgICAgICAgICAgbGFzdEZvY3VzYWJsZVBpbGxLZXlEcm9wZG93bi5mb2N1cygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRNZW51SXRlbUxhYmVsKGluZGV4OiBudW1iZXIpIHtcclxuICAgICAgICByZXR1cm4gW3RoaXMuaWRCYWcucGlsbExhYmVsLCB0aGlzLmlkQmFnLmRpc2FibGVkTGFiZWwsIHRoaXMuaWRCYWcuaXJyZW1vdmFibGVMYWJlbCwgdGhpcy5pZEJhZy5yZW1vdmFibGVMYWJlbF1cclxuICAgICAgICAgICAgLm1hcChsID0+IGAke2x9JHtpbmRleH1gKVxyXG4gICAgICAgICAgICAuam9pbignICcpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBjcmVhdGVJZEJhZygpOiBNc2Z0U21lLlN0cmluZ01hcDxzdHJpbmc+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBwaWxsTGFiZWw6ICcnLFxyXG4gICAgICAgICAgICBkaXNhYmxlZExhYmVsOiAnJyxcclxuICAgICAgICAgICAgaXJyZW1vdmFibGVMYWJlbDogJycsXHJcbiAgICAgICAgICAgIHJlbW92YWJsZUxhYmVsOiAnJ1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzZXRVbnNldFByb3BlcnR5KCkge1xyXG4gICAgICAgIGlmICh0aGlzLmlzRWRpdGluZyAmJiB0aGlzLnF1ZXJ5RWRpdG9yLmNvbnRlbnRzICYmIHRoaXMucXVlcnlFZGl0b3IuY29udGVudHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLnNlbGVjdGVkSXRlbTtcclxuICAgICAgICAgICAgaWYgKCghaXRlbS5jb2x1bW4udmFsdWUgfHwgTXNmdFNtZS5pc051bGxPcldoaXRlU3BhY2UoaXRlbS5jb2x1bW4udmFsdWUpIHx8XHJcbiAgICAgICAgICAgICAgICAhaXRlbS52YWx1ZS50ZW1wb3JhcnlWYWx1ZSB8fCBNc2Z0U21lLmlzTnVsbE9yV2hpdGVTcGFjZShpdGVtLnZhbHVlLnRlbXBvcmFyeVZhbHVlKSkpIHtcclxuICAgICAgICAgICAgICAgIGl0ZW0udmFsdWUuaXNWYWx1ZVVuc2V0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGl0ZW0udmFsdWUuaXNWYWx1ZVVuc2V0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVF1ZXJ5RWRpdG9yTGFiZWwoaXRlbSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldFNlbGVjdGVkSHRtbCgpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkSHRtbCA9IDxIVE1MRWxlbWVudD5ldmVudC50YXJnZXQ7XHJcbiAgICAgICAgY29uc3QgZCA9IERvbTtcclxuICAgICAgICB0aGlzLnBvc3RTZWxlY3RlZEh0bWwgPSBkLmdldE5leHRGb2N1c2FibGVFbGVtZW50KHRoaXMuc2VsZWN0ZWRIdG1sKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNldEVkaXRpbmdJdGVtVmFsaWRQcm9wZXJ0eSgpIHtcclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEl0ZW0gJiYgKHRoaXMuaXNFZGl0aW5nICYmIHRoaXMuYXBwbHlNb2RlID09PSBBcHBseU1vZGUuQWN0aXZlKSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEl0ZW0udmFsdWUuaXNWYWx1ZVVuc2V0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbS5pbnZhbGlkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkSXRlbS52YWx1ZS50eXBlID09PSBRdWVyeURhdGFJdGVtVmFsdWVUeXBlLlRleHRJbnB1dCB8fFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtLnZhbHVlLnR5cGUgPT09IFF1ZXJ5RGF0YUl0ZW1WYWx1ZVR5cGUuU2luZ2xlRHJvcGRvd24pIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgaXNFbXB0eVZhbHVlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkSXRlbS52YWx1ZS50ZW1wb3JhcnlWYWx1ZSB8fCAhdGhpcy5zZWxlY3RlZEl0ZW0udmFsdWUudGVtcG9yYXJ5VmFsdWUubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzRW1wdHlWYWx1ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0VtcHR5VmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0uaW52YWxpZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0uaW52YWxpZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZEl0ZW0udmFsdWUudHlwZSA9PT0gUXVlcnlEYXRhSXRlbVZhbHVlVHlwZS5NdWx0aVNlbGVjdERyb3Bkb3duKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkSXRlbS52YWx1ZS50ZW1wb3JhcnlWYWx1ZSB8fCAhdGhpcy5zZWxlY3RlZEl0ZW0udmFsdWUudGVtcG9yYXJ5VmFsdWUubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtLmludmFsaWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtLmludmFsaWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRJdGVtLnZhbHVlLnR5cGUgPT09IFF1ZXJ5RGF0YUl0ZW1WYWx1ZVR5cGUuVGltZXNwYW5Ecm9wZG93bikge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5zZWxlY3RlZEl0ZW0udmFsdWUudGVtcG9yYXJ5VmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0uaW52YWxpZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0uaW52YWxpZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGZpbHRlclVuc2V0VmFsdWVJdGVtQW5kU2V0SW52YWxpZCgpIHtcclxuICAgICAgICB0aGlzLnF1ZXJ5RWRpdG9yLmNvbnRlbnRzID0gdGhpcy5xdWVyeUVkaXRvci5jb250ZW50cy5maWx0ZXIoKGl0ZW06IFF1ZXJ5RGF0YUl0ZW0pID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuICEoaXRlbS5pbnZhbGlkICYmIGl0ZW0udmFsdWUuaXNWYWx1ZVVuc2V0KSB8fCBpdGVtLmlycmVtb3ZhYmxlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZW1vdmVRdWVyeUVkaXRvckl0ZW0oJGV2ZW50LCBpbmRleCwgaXNGcm9tS2V5Ym9hcmRQcmVzcz86IGJvb2xlYW4pIHtcclxuICAgICAgICBpZiAoJGV2ZW50KSB7XHJcbiAgICAgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBuZXh0Rm9jdXNhYmxlUGlsbCA9IHRoaXMuZmluZE5leHRGb2N1c2FibGVQaWxsKGluZGV4KTtcclxuICAgICAgICBpZiAodGhpcy5xdWVyeUVkaXRvciAmJiB0aGlzLnF1ZXJ5RWRpdG9yLmNvbnRlbnRzICYmIHRoaXMucXVlcnlFZGl0b3IuY29udGVudHNbaW5kZXhdICYmXHJcbiAgICAgICAgICAgICF0aGlzLnF1ZXJ5RWRpdG9yLmNvbnRlbnRzW2luZGV4XS5pcnJlbW92YWJsZSkge1xyXG4gICAgICAgICAgICB0aGlzLnF1ZXJ5RWRpdG9yLmNvbnRlbnRzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHF1ZXJ5RWRpdG9yID0gdGhpcy52YWxpZGF0ZVF1ZXJ5RWRpdG9yKCk7XHJcbiAgICAgICAgICAgIHRoaXMuYXBwbHlRdWVyeUVkaXRvclRvRGF0YXRhYmxlKHF1ZXJ5RWRpdG9yKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5mb2N1c09uVGhlTmV4dFBpbGxBZnRlclJlbW92ZShpbmRleCwgaXNGcm9tS2V5Ym9hcmRQcmVzcywgbmV4dEZvY3VzYWJsZVBpbGwpO1xyXG5cclxuICAgICAgICAvLyBTZXQgZGlzYWJsZVJlc2V0QnV0dG9uIHZhbHVlXHJcbiAgICAgICAgdGhpcy5zZXREaXNhYmxlUmVzZXRCdXR0b24oKTtcclxuICAgIH1cclxuXHJcbiAgICBAWWllbGQoKVxyXG4gICAgcHJpdmF0ZSBmb2N1c09uVGhlTmV4dFBpbGxBZnRlclJlbW92ZShpbmRleDogbnVtYmVyLCBpc0Zyb21LZXlib2FyZFByZXNzOiBib29sZWFuLCBuZXh0Rm9jdXNhYmxlUGlsbDogSFRNTEVsZW1lbnQpIHtcclxuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRJdGVtKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtID0gdGhpcy5xdWVyeUVkaXRvci5jb250ZW50c1tpbmRleF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpc0Zyb21LZXlib2FyZFByZXNzICYmIG5leHRGb2N1c2FibGVQaWxsICYmICF0aGlzLnNlbGVjdGVkSXRlbS5pcnJlbW92YWJsZSkge1xyXG4gICAgICAgICAgICBuZXh0Rm9jdXNhYmxlUGlsbC5mb2N1cygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGZpbmROZXh0Rm9jdXNhYmxlUGlsbChpbmRleCkge1xyXG4gICAgICAgIGNvbnN0IHF1ZXJ5RWRpdG9yTGVuZ3RoID0gdGhpcy5xdWVyeUVkaXRvciAmJiB0aGlzLnF1ZXJ5RWRpdG9yLmNvbnRlbnRzXHJcbiAgICAgICAgICAgID8gdGhpcy5xdWVyeUVkaXRvci5jb250ZW50cy5sZW5ndGggOiAwO1xyXG4gICAgICAgIGNvbnN0IGQgPSBEb207XHJcbiAgICAgICAgbGV0IHBvc3RGb2N1c2FibGVFbGVtZW50LCBwcmVGb2N1c2FibGVFbGVtZW50O1xyXG4gICAgICAgIGlmICh0aGlzLmlzRWRpdGluZykge1xyXG4gICAgICAgICAgICBwb3N0Rm9jdXNhYmxlRWxlbWVudCA9IHRoaXMucG9zdFNlbGVjdGVkSHRtbDtcclxuICAgICAgICAgICAgaWYgKHBvc3RGb2N1c2FibGVFbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgICBwcmVGb2N1c2FibGVFbGVtZW50ID0gZC5nZXRQcmV2aW91c0ZvY3VzYWJsZUVsZW1lbnQodGhpcy5zZWxlY3RlZEh0bWwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcG9zdEZvY3VzYWJsZUVsZW1lbnQgPSBkLmdldE5leHRGb2N1c2FibGVFbGVtZW50KHRoaXMuc2VsZWN0ZWRIdG1sKTtcclxuICAgICAgICAgICAgcHJlRm9jdXNhYmxlRWxlbWVudCA9IGQuZ2V0UHJldmlvdXNGb2N1c2FibGVFbGVtZW50KHRoaXMuc2VsZWN0ZWRIdG1sKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFxdWVyeUVkaXRvckxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9IGVsc2UgaWYgKHF1ZXJ5RWRpdG9yTGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBwb3N0Rm9jdXNhYmxlRWxlbWVudDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggPT09IHF1ZXJ5RWRpdG9yTGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHByZUZvY3VzYWJsZUVsZW1lbnQ7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcG9zdEZvY3VzYWJsZUVsZW1lbnQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlc2V0UXVlcnlFZGl0b3IoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnF1ZXJ5RWRpdG9yKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5wcmVzZXRRdWVyeUVkaXRvciB8fCAhdGhpcy5wcmVzZXRRdWVyeUVkaXRvci5jb250ZW50cykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wcmVzZXRRdWVyeUVkaXRvciA9IHtcclxuICAgICAgICAgICAgICAgICAgICBjb250ZW50czogW11cclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5xdWVyeUVkaXRvciA9IHRoaXMuY3VzdG9tRGVlcENsb25lUXVlcnlFZGl0b3IodGhpcy5wcmVzZXRRdWVyeUVkaXRvcik7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5xdWVyeUVkaXRvciB8fCAhdGhpcy5xdWVyeUVkaXRvci5jb250ZW50cykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5xdWVyeUVkaXRvciA9IHtcclxuICAgICAgICAgICAgICAgICAgICBjb250ZW50czogW11cclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCB0ZW1wID0gdGhpcy5jdXN0b21EZWVwQ2xvbmVRdWVyeUVkaXRvcih0aGlzLnByZXNldFF1ZXJ5RWRpdG9yKTtcclxuICAgICAgICAgICAgdGhpcy5xdWVyeUVkaXRvciA9IHRlbXA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHF1ZXJ5RWRpdG9yID0gdGhpcy52YWxpZGF0ZVF1ZXJ5RWRpdG9yKCk7XHJcbiAgICAgICAgdGhpcy5hcHBseVF1ZXJ5RWRpdG9yVG9EYXRhdGFibGUocXVlcnlFZGl0b3IpO1xyXG5cclxuICAgICAgICAvLyBTZXQgZGlzYWJsZVJlc2V0QnV0dG9uIHZhbHVlXHJcbiAgICAgICAgdGhpcy5kaXNhYmxlUmVzZXRCdXR0b24gPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY3VzdG9tRGVlcENsb25lUXVlcnlFZGl0b3IoaW5wdXQ6IFF1ZXJ5RGF0YSkge1xyXG4gICAgICAgIGNvbnN0IHJlcyA9IHtcclxuICAgICAgICAgICAgY29udGVudHM6IFtdXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgaWYgKGlucHV0ICYmIGlucHV0LmNvbnRlbnRzICYmIGlucHV0LmNvbnRlbnRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgaW5wdXQuY29udGVudHMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtICYmIGl0ZW0udmFsdWUgJiYgaXRlbS52YWx1ZS50eXBlICYmIGl0ZW0udmFsdWUudHlwZSA9PT0gUXVlcnlEYXRhSXRlbVZhbHVlVHlwZS5UaW1lc3BhbkRyb3Bkb3duKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzLmNvbnRlbnRzW2luZGV4XSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoaXRlbSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gaXRlbS52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUudmFsdWUgJiYgdmFsdWUudmFsdWUuaXNWYWxpZCgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcy5jb250ZW50c1tpbmRleF0udmFsdWUudmFsdWUgPSBuZXcgRGF0ZVJhbmdlKHZhbHVlLnZhbHVlLnN0YXJ0LCB2YWx1ZS52YWx1ZS5lbmQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUudGVtcG9yYXJ5VmFsdWUgJiYgdmFsdWUudGVtcG9yYXJ5VmFsdWUuaXNWYWxpZCgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcy5jb250ZW50c1tpbmRleF0udmFsdWUudGVtcG9yYXJ5VmFsdWUgPSBuZXcgRGF0ZVJhbmdlKHZhbHVlLnRlbXBvcmFyeVZhbHVlLnN0YXJ0LCB2YWx1ZS50ZW1wb3JhcnlWYWx1ZS5lbmQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzLmNvbnRlbnRzW2luZGV4XSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoaXRlbSkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByZXM7XHJcbiAgICB9XHJcblxyXG4gICAgQERlYm91bmNlKClcclxuICAgIHB1YmxpYyBnZXRUaW1lcmFuZ2VEaXNwbGF5VmFsdWUodmFsdWU6IERhdGVSYW5nZSkge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaW5pdGlhbGl6ZU9wZXJhbmRzTGlzdCgpIHtcclxuICAgICAgICBjb25zdCByZXMgPSBuZXcgQXJyYXkoKTtcclxuICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoUXVlcnlEYXRhT3BlcmFuZCk7XHJcbiAgICAgICAgaWYgKGtleXMgJiYga2V5cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAga2V5cy5mb3JFYWNoKChrZXkpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChRdWVyeURhdGFPcGVyYW5kW2tleV0gPT09ICc6Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGtleSxcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogUXVlcnlEYXRhT3BlcmFuZFtrZXldXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgcmVzLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm9wZXJhbmRzID0gcmVzO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdXBkYXRlUXVlcnlFZGl0b3JMYWJlbChpdGVtOiBRdWVyeURhdGFJdGVtKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKGl0ZW0gJiYgaXRlbS5jb2x1bW4udmFsdWUpIHtcclxuICAgICAgICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5pbnRlcm5hbENvbHVtbkxpc3QuZmluZCgoaSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGkudmFsdWUgPT09IGl0ZW0uY29sdW1uLnZhbHVlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgaXRlbS5jb2x1bW4ubGFiZWwgPSBjb2x1bW4ubGFiZWw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbmV3UXVlcnlFZGl0b3JIZWxwZXIoXHJcbiAgICAgICAgY29sdW1uOiBzdHJpbmcsXHJcbiAgICAgICAgdmFsdWU6IHN0cmluZyxcclxuICAgICAgICBvcGVyYW5kPzogc3RyaW5nLFxyXG4gICAgICAgIHZhbHVlVHlwZT86IFF1ZXJ5RGF0YUl0ZW1WYWx1ZVR5cGUpOiBRdWVyeURhdGFJdGVtIHtcclxuXHJcbiAgICAgICAgY29uc3QgcmVzID0ge1xyXG4gICAgICAgICAgICBjb2x1bW46IHtcclxuICAgICAgICAgICAgICAgIGxhYmVsOiAnJyxcclxuICAgICAgICAgICAgICAgIHZhbHVlOiBjb2x1bW5cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgb3BlcmFuZDogb3BlcmFuZCA/IG9wZXJhbmQgOiBRdWVyeURhdGFPcGVyYW5kLkVxLFxyXG4gICAgICAgICAgICB2YWx1ZToge1xyXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlID8gdmFsdWUgOiAnJyxcclxuICAgICAgICAgICAgICAgIHRlbXBvcmFyeVZhbHVlOiAnJyxcclxuICAgICAgICAgICAgICAgIHRvb2x0aXA6IHZhbHVlID8gdmFsdWUgOiAnJyxcclxuICAgICAgICAgICAgICAgIHR5cGU6IHZhbHVlVHlwZSA/IHZhbHVlVHlwZSA6IFF1ZXJ5RGF0YUl0ZW1WYWx1ZVR5cGUuVGV4dElucHV0LFxyXG4gICAgICAgICAgICAgICAgaXNWYWx1ZVVuc2V0OiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgc2VhcmNoYWJsZTogKHZhbHVlVHlwZSA9PT0gUXVlcnlEYXRhSXRlbVZhbHVlVHlwZS5TaW5nbGVEcm9wZG93blxyXG4gICAgICAgICAgICAgICAgICAgIHx8IHZhbHVlVHlwZSA9PT0gUXVlcnlEYXRhSXRlbVZhbHVlVHlwZS5NdWx0aVNlbGVjdERyb3Bkb3duKSA/IHRydWUgOiBmYWxzZVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBpc0VkaXRpbmc6IHRydWUsXHJcbiAgICAgICAgICAgIGludmFsaWQ6IHRydWVcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY29sdW1uTGlzdENvbnN0cnVjdG9yKGNvbHVtbkxpc3Q6IERhdGFUYWJsZUNvbHVtbkNvbXBvbmVudFtdKSB7XHJcbiAgICAgICAgY29uc3QgcmVzOiBRdWVyeUVkaXRvckRhdGFUYWJsZUNvbHVtbkxpc3RJdGVtW10gPSBbXTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbHVtbkxpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgLy8gRmlsdGVyIG91dCBkaXNhYmxlZCBvbmVzXHJcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtbiA9IGNvbHVtbkxpc3RbaV07XHJcbiAgICAgICAgICAgIGlmIChjb2x1bW4gJiYgY29sdW1uLnF1ZXJ5RWRpdG9yVHlwZVxyXG4gICAgICAgICAgICAgICAgJiYgY29sdW1uLnF1ZXJ5RWRpdG9yVHlwZSA9PT0gdGhpcy5xdWVyeURhdGFJdGVtVmFsdWVUeXBlLkRpc2FibGVkKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXMucHVzaCh0aGlzLmNvbHVtbkxpc3RIZWxwZXIoY29sdW1uTGlzdFtpXSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY29sdW1uTGlzdEhlbHBlcihjb2x1bW5MaXN0SXRlbTogRGF0YVRhYmxlQ29sdW1uQ29tcG9uZW50KTogUXVlcnlFZGl0b3JEYXRhVGFibGVDb2x1bW5MaXN0SXRlbSB7XHJcbiAgICAgICAgY29uc3QgcmVzOiBRdWVyeUVkaXRvckRhdGFUYWJsZUNvbHVtbkxpc3RJdGVtID0ge1xyXG4gICAgICAgICAgICBsYWJlbDogY29sdW1uTGlzdEl0ZW0uaGVhZGVyLFxyXG4gICAgICAgICAgICB2YWx1ZTogY29sdW1uTGlzdEl0ZW0uZmllbGQsXHJcbiAgICAgICAgICAgIHF1ZXJ5RWRpdG9yVHlwZTogY29sdW1uTGlzdEl0ZW0ucXVlcnlFZGl0b3JUeXBlID8gY29sdW1uTGlzdEl0ZW0ucXVlcnlFZGl0b3JUeXBlIDpcclxuICAgICAgICAgICAgICAgIFF1ZXJ5RGF0YUl0ZW1WYWx1ZVR5cGUuVGV4dElucHV0LFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKHJlcy5xdWVyeUVkaXRvclR5cGUgPT09IFF1ZXJ5RGF0YUl0ZW1WYWx1ZVR5cGUuVGltZXNwYW5Ecm9wZG93bikge1xyXG4gICAgICAgICAgICBpZiAoY29sdW1uTGlzdEl0ZW0ucXVlcnlFZGl0b3JPcHRpb25zICYmIGNvbHVtbkxpc3RJdGVtLnF1ZXJ5RWRpdG9yT3B0aW9ucy5maWVsZFZhbHVlLmxlbmd0aCA+IDBcclxuICAgICAgICAgICAgICAgICYmIGNvbHVtbkxpc3RJdGVtLnF1ZXJ5RWRpdG9yT3B0aW9ucy5maWVsZE5hbWUgPT09IHJlcy52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgcmVzLnByZXNldE9wdGlvbnMgPSBjb2x1bW5MaXN0SXRlbS5xdWVyeUVkaXRvck9wdGlvbnMuZmllbGRWYWx1ZTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJlcy5wcmVzZXRPcHRpb25zID0gW107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByZXM7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzZXRJc0VkaXRpbmcoaXRlbTogUXVlcnlEYXRhSXRlbSwgaXNFZGl0aW5nOiBib29sZWFuKSB7XHJcbiAgICAgICAgaWYgKGl0ZW0pIHtcclxuICAgICAgICAgICAgaXRlbS5pc0VkaXRpbmcgPSBpc0VkaXRpbmc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaXNFZGl0aW5nID0gaXNFZGl0aW5nO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFRoaXMgZnVuY3Rpb24gd2lsbCBwb3RlbnRpYWxseSB1c2VkIGZvciBjaGVja2luZyBpZiB0aGUgcGlsbCByZWFjaGVzIDMwMHB4IG1heCBhbmQgYWxzbyB2YWx1ZSBmaWVsZCBkaXNwbGF5IGlzIGluIGVsbGVwc2lzXHJcbiAgICBAWWllbGQoKVxyXG4gICAgcHVibGljIGNoZWNrVmFsdWVGaWVsZFRydW5jYXRlZChpbnB1dCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIC8vIGNoZWNrVmFsdWVGaWVsZFRydW5jYXRlZFJlY29yZHMgaGVscHMgcmVuZGVyaW5nIGZvciB0aG9zZSBwcmVzZXQgcGlsbHMgdG8gcmVuZGVyIHByb3Blcmx5LlxyXG4gICAgICAgIC8vIGlmIHJlYWNoZXMgbGltaXQgMzAwcHggYW5kIHZhbHVlIGhhcyBlbGxpcHNpcyB3aWxsIHVwZGF0ZSB0aGUgY3NzIHNvIHRoYXQgdmFsdWUgY2FuIHRha2UgNzAlIHdpZHRoXHJcbiAgICAgICAgLy8gQnkgZGVzaWduLlxyXG4gICAgICAgIGlmICh0aGlzLmNoZWNrVmFsdWVGaWVsZFRydW5jYXRlZFJlY29yZHMgJiYgdGhpcy5jaGVja1ZhbHVlRmllbGRUcnVuY2F0ZWRSZWNvcmRzLmluY2x1ZGVzKGlucHV0KSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jaGVja1ZhbHVlRmllbGRUcnVuY2F0ZWRSZWNvcmRzLnB1c2goaW5wdXQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgcmVzID0gZmFsc2UsIHZhbHVlSHRtbDtcclxuICAgICAgICBjb25zdCB0YXJnZXRQaWxsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaW5wdXQpO1xyXG4gICAgICAgIGlmICh0YXJnZXRQaWxsICYmIHRhcmdldFBpbGwuY2hpbGRyZW4gJiYgdGFyZ2V0UGlsbC5jaGlsZHJlbi5sZW5ndGgpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0YXJnZXRQaWxsLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZCA9IHRhcmdldFBpbGwuY2hpbGRyZW5baV07XHJcbiAgICAgICAgICAgICAgICBpZiAoY2hpbGQuY2xhc3NOYW1lICYmIGNoaWxkLmNsYXNzTmFtZS5tYXRjaCgvc21lLXF1ZXJ5LWVkaXRvci12YWx1ZS8pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVIdG1sID0gY2hpbGQ7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHZhbHVlSHRtbCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlSHRtbC5zY3JvbGxXaWR0aCA+IHZhbHVlSHRtbC5vZmZzZXRXaWR0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlcyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlcztcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgZ2V0SW5pdGlhbEhvc3RDbGFzc2VzKCk6IHN0cmluZ1tdIHtcclxuICAgICAgICByZXR1cm4gc3VwZXIuZ2V0SW5pdGlhbEhvc3RDbGFzc2VzKCkuY29uY2F0KFxyXG4gICAgICAgICAgICAnc21lLXF1ZXJ5LWVkaXRvcicsXHJcbiAgICAgICAgICAgICdzbWUtbGF5b3V0LXF1ZXJ5LWVkaXRvcicsXHJcbiAgICAgICAgICAgICdzbWUtZm9jdXMtem9uZSdcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2V0U2VsZWN0ZWRJdGVtVmFsdWUoaXRlbTogUXVlcnlEYXRhSXRlbSwgdGFyZ2V0OiBhbnkpIHtcclxuICAgICAgICBpdGVtLnZhbHVlLnZhbHVlID0gdGFyZ2V0O1xyXG4gICAgICAgIGl0ZW0udmFsdWUudG9vbHRpcCA9IGl0ZW0udmFsdWUudmFsdWUudG9TdHJpbmcoKTtcclxuICAgICAgICBpZiAoaXRlbS52YWx1ZS50eXBlID09PSBRdWVyeURhdGFJdGVtVmFsdWVUeXBlLlRpbWVzcGFuRHJvcGRvd24pIHtcclxuICAgICAgICAgICAgaXRlbS52YWx1ZS50ZW1wb3JhcnlWYWx1ZSA9IHRhcmdldDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uQ3VzdG9tTGFiZWxFbWl0KGxhYmVsOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbS52YWx1ZS5jdXN0b21EaXNwbGF5TGFiZWwgPSBsYWJlbDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBUT0RPOiBjb25zaWRlcmluZyB0aGUgY3ViZSBjb21wbGV4aXR5LCBvbmUgb3B0aW9uIGlzIHRvIHJlcXVpcmUgdGhlIHVzZXIgdG8gcGFzcyBpbiB0aGUgcHJlc2VsZWN0ZWQgb2JqZWN0IGFzIHdlbGwuXHJcbiAgICBwcml2YXRlIHVwZGF0ZVByZXNldFF1ZXJ5RWRpdG9yQ3VzdG9tTGFiZWxzKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnByZXNldFF1ZXJ5RWRpdG9yICYmIHRoaXMucHJlc2V0UXVlcnlFZGl0b3IuY29udGVudHMgJiYgdGhpcy5wcmVzZXRRdWVyeUVkaXRvci5jb250ZW50cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5wcmVzZXRRdWVyeUVkaXRvci5jb250ZW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcGlsbCA9IHRoaXMucHJlc2V0UXVlcnlFZGl0b3IuY29udGVudHNbaV07XHJcbiAgICAgICAgICAgICAgICBpZiAocGlsbCAmJiBwaWxsLnZhbHVlICYmIHBpbGwudmFsdWUudHlwZSA9PT0gUXVlcnlEYXRhSXRlbVZhbHVlVHlwZS5UaW1lc3BhbkRyb3Bkb3duKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmludGVybmFsQ29sdW1uTGlzdC5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLmludGVybmFsQ29sdW1uTGlzdFtqXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldCAmJiB0YXJnZXQucHJlc2V0T3B0aW9ucyAmJiB0YXJnZXQucHJlc2V0T3B0aW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXRPcHRpb24gPSB0YXJnZXQucHJlc2V0T3B0aW9ucy5maW5kKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0udmFsdWUuaXNFcXVhbFRvKHBpbGwudmFsdWUudmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaWxsLnZhbHVlLmN1c3RvbURpc3BsYXlMYWJlbCA9IHRhcmdldE9wdGlvbi5sYWJlbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzTG9hZGluZ1wiPlxyXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJxdWVyeUVkaXRvciYmcXVlcnlFZGl0b3IuY29udGVudHNcIj5cclxuICAgIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2YgcXVlcnlFZGl0b3IuY29udGVudHM7IGxldCBpbmRleCA9IGluZGV4XCIgY2xhc3M9XCJzbWUtcXVlcnktZWRpdG9yLXBpbGxcIlxyXG4gICAgICBbY2xhc3Muc21lLWRpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWRcIiBbY2xhc3Muc21lLWludmFsaWRdPVwiaXRlbS5pbnZhbGlkJiYhaXRlbS5pc0VkaXRpbmdcIlxyXG4gICAgICBbY2xhc3Muc21lLWlycmVtb3ZhYmxlXT1cIml0ZW0uaXJyZW1vdmFibGVcIiBbY2xhc3Muc21lLWZvY3VzLXRyYXBdPVwiaXRlbS5pc0VkaXRpbmdcIlxyXG4gICAgICAoa2V5ZG93bi5EZWxldGUpPVwicmVtb3ZlUXVlcnlFZGl0b3JJdGVtKCRldmVudCwgaW5kZXgsIHRydWUpXCIgKGZvY3VzKT1cInNldFNlbGVjdGVkSHRtbCgpXCIgcm9sZT1cIm1lbnVpdGVtXCJcclxuICAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cImdldE1lbnVJdGVtTGFiZWwoaW5kZXgpXCIgKGtleWRvd24uRW50ZXIpPVwib25QaWxsRW50ZXJUcmFwKCRldmVudCwgaXRlbSwgaW5kZXgpXCJcclxuICAgICAgdGFiaW5kZXg9XCIwXCI+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCIhaXRlbS5pc0VkaXRpbmdcIiBbc21lVG9vbHRpcF09XCJ0b29sdGlwXCJcclxuICAgICAgICBjbGFzcz1cInNtZS1xdWVyeS1lZGl0b3ItcGlsbC1jb250ZW50IHNtZS1xdWVyeS1lZGl0b3ItcGlsbC1jb250ZW50LXByZXZpZXdcIlxyXG4gICAgICAgIChjbGljayk9XCJvblBpbGxDbGljayhpdGVtLCBpbmRleClcIiBbaWRdPVwiaWRCYWcucGlsbExhYmVsICsgaW5kZXhcIj5cclxuICAgICAgICA8IS0tIEljb24gLS0+XHJcbiAgICAgICAgPHNwYW4gcm9sZT1cInByZXNlbnRhdGlvblwiICpuZ0lmPVwiaXRlbS5pY29uXCIgY2xhc3M9XCJzbWUtcXVlcnktZWRpdG9yLWljb25cIiBbbmdDbGFzc109XCJpdGVtLmljb25cIj48L3NwYW4+XHJcbiAgICAgICAgPCEtLSBLZXkgLS0+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJzbWUtcXVlcnktZWRpdG9yLWNvbHVtblwiPnt7aXRlbS5jb2x1bW4ubGFiZWx9fTwvc3Bhbj5cclxuICAgICAgICA8c21lLWxvYWRpbmctd2hlZWwgKm5nSWY9XCJpc0NvbHVtbkRyb3Bkb3duQnVzeVwiIFtpc0JhY2tncm91bmRUcmFuc3BhcmVudF09XCJ0cnVlXCIgc2l6ZT1cImV4dHJhLXNtYWxsXCI+XHJcbiAgICAgICAgPC9zbWUtbG9hZGluZy13aGVlbD5cclxuICAgICAgICA8IS0tIE9wZXJhdG9yIC0tPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwic21lLXF1ZXJ5LWVkaXRvci1vcGVyYXRvclwiPnt7Z2V0SXRlbU9wZXJhdG9yRGlzcGxheVZhbHVlKGl0ZW0pfX08L3NwYW4+XHJcbiAgICAgICAgPCEtLSBWYWx1ZSAtLT5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cInNtZS1xdWVyeS1lZGl0b3ItdmFsdWVcIj5cclxuICAgICAgICAgIDxzdHJvbmc+XHJcbiAgICAgICAgICAgIDxzcGFuPnt7Z2V0SXRlbURpc3BsYXlWYWx1ZShpdGVtKX19PC9zcGFuPlxyXG4gICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiaXRlbS5pbnZhbGlkJiYoaXRlbS52YWx1ZS50eXBlPT09cXVlcnlEYXRhSXRlbVZhbHVlVHlwZS5UZXh0SW5wdXR8fGl0ZW0udmFsdWUudHlwZT09PXF1ZXJ5RGF0YUl0ZW1WYWx1ZVR5cGUuU2luZ2xlRHJvcGRvd258fGl0ZW0udmFsdWUudHlwZT09PXF1ZXJ5RGF0YUl0ZW1WYWx1ZVR5cGUuVGltZXNwYW5Ecm9wZG93bilcIj57e3Jlc291cmNlU3RyaW5ncy5VbnNldH19PC9pPlxyXG4gICAgICAgICAgICA8IS0tIFtuZ0NsYXNzXT1cImNoZWNrVmFsdWVGaWVsZFRydW5jYXRlZChpZEJhZy5waWxsTGFiZWwgKyBpbmRleCkgPyAnc21lLXF1ZXJ5LWVkaXRvci1jb2x1bW4tZWxsaXBzaXMnOiAnJ1wiPjxzdHJvbmc+e3tpdGVtLnZhbHVlLnZhbHVlfX08L3N0cm9uZz48L3NwYW4+IC0tPlxyXG4gICAgICAgICAgPC9zdHJvbmc+XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwic21lLXNjcmVlbi1yZWFkZXJcIj5cclxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiISFpdGVtLmRpc2FibGVkXCIgW2lkXT1cImlkQmFnLmRpc2FibGVkTGFiZWwgKyBpbmRleFwiPnt7cmVzb3VyY2VTdHJpbmdzLlJlYWRPbmx5fX08L3NwYW4+XHJcblxyXG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCIhIWl0ZW0uaXJyZW1vdmFibGVcIlxyXG4gICAgICAgICAgICBbaWRdPVwiaWRCYWcuaXJyZW1vdmFibGVMYWJlbCArIGluZGV4XCI+e3tyZXNvdXJjZVN0cmluZ3MuSXJyZW1vdmFibGV9fTwvc3Bhbj5cclxuXHJcbiAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFpdGVtLmlycmVtb3ZhYmxlXCJcclxuICAgICAgICAgICAgW2lkXT1cImlkQmFnLnJlbW92YWJsZUxhYmVsICsgaW5kZXhcIj57e3Jlc291cmNlU3RyaW5ncy5SZW1vdmFibGVIaW50fX08L3NwYW4+XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDxidXR0b24gKm5nSWY9XCIhaXRlbS5pcnJlbW92YWJsZVwiIChtb3VzZXVwKT1cInJlbW92ZVF1ZXJ5RWRpdG9ySXRlbSgkZXZlbnQsIGluZGV4KVwiXHJcbiAgICAgICAgICAoa2V5ZG93bi5FbnRlcik9XCJyZW1vdmVRdWVyeUVkaXRvckl0ZW0oJGV2ZW50LCBpbmRleCwgdHJ1ZSlcIiByb2xlPVwiYnV0dG9uXCJcclxuICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwicmVzb3VyY2VTdHJpbmdzLkRlbGV0ZVwiIGNsYXNzPVwic21lLXF1ZXJ5LWVkaXRvci1yZW1vdmUtYnV0dG9uXCJcclxuICAgICAgICAgIFt0YWJpbmRleF09XCJpdGVtLmlzRWRpdGluZyA/IDAgOiAtMVwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJzbWUtaWNvbiBzbWUtcXVlcnktZWRpdG9yLXJlbW92ZS1idXR0b24taWNvblwiPjwvc3Bhbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxuZy10ZW1wbGF0ZSAjdG9vbHRpcD5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic21lLXF1ZXJ5LWVkaXRvci10b29sdGlwXCI+e3tpdGVtLmNvbHVtbi5sYWJlbH19IHt7aXRlbS5vcGVyYW5kfX1cclxuICAgICAgICAgIDxzdHJvbmcgKm5nSWY9XCJpdGVtLnZhbHVlLnR5cGUhPT1xdWVyeURhdGFJdGVtVmFsdWVUeXBlLlRpbWVzcGFuRHJvcGRvd25cIj5cclxuICAgICAgICAgICAge3tpdGVtLnZhbHVlLmlzVmFsdWVVbnNldCA/IHRoaXMucmVzb3VyY2VTdHJpbmdzLlVuc2V0IDogaXRlbS52YWx1ZS52YWx1ZX19PC9zdHJvbmc+XHJcbiAgICAgICAgICA8c3Ryb25nICpuZ0lmPVwiaXRlbS52YWx1ZS50eXBlPT09cXVlcnlEYXRhSXRlbVZhbHVlVHlwZS5UaW1lc3BhbkRyb3Bkb3duXCI+XHJcbiAgICAgICAgICAgIHt7aXRlbS52YWx1ZS5pc1ZhbHVlVW5zZXQgPyB0aGlzLnJlc291cmNlU3RyaW5ncy5VbnNldCA6IGl0ZW0udmFsdWUudG9vbHRpcH19PC9zdHJvbmc+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgIDxmb3JtICpuZ0lmPVwiaXRlbS5pc0VkaXRpbmdcIlxyXG4gICAgICAgIGNsYXNzPVwic21lLXF1ZXJ5LWVkaXRvci1waWxsLWNvbnRlbnQgc21lLXF1ZXJ5LWVkaXRvci1waWxsLWNvbnRlbnQtZWRpdGluZyBzbWUtZm9jdXMtdHJhcFwiXHJcbiAgICAgICAgKGtleWRvd24uRW50ZXIpPVwib25QaWxsRXhpdFRyYXAoJGV2ZW50KVwiIChrZXlkb3duLkVzYyk9XCJvblBpbGxFeGl0VHJhcCgkZXZlbnQpXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNtZS1xdWVyeS1lZGl0b3ItY29sdW1uXCI+XHJcbiAgICAgICAgICA8c21lLWZvcm0tZmllbGQgdHlwZT1cImNvbWJvYm94XCIgbmFtZT1cInZhbHVlXCIgWyhuZ01vZGVsKV09XCJpdGVtLmNvbHVtbi52YWx1ZVwiXHJcbiAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uUXVlcnlFZGl0b3JDaGFuZ2UoaW5kZXgsIHRydWUsIG51bGwsIHRydWUpXCIgY2xhc3M9XCJzbWUtcXVlcnktZWRpdG9yLWNvbHVtblwiXHJcbiAgICAgICAgICAgIFtjb21wYWN0XT1cInRydWVcIiBbbWluaW1hbF09XCJ0cnVlXCIgW2NsYXNzLnNtZS1mb2N1cy16b25lXT1cIml0ZW0uaXNFZGl0aW5nXCJcclxuICAgICAgICAgICAgKm5nSWY9XCIhKGl0ZW0uY29sdW1uJiZpdGVtLmNvbHVtbi51bmVkaXRhYmxlKVwiIFtwbGFjZWhvbGRlcl09XCJyZXNvdXJjZVN0cmluZ3MuU2VsZWN0S2V5XCJcclxuICAgICAgICAgICAgW2Ryb3Bkb3duQXBwbHlGb3JtRmllbGRPZmZzZXRXaWR0aF09XCJmYWxzZVwiPlxyXG4gICAgICAgICAgICA8c21lLW9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGludGVybmFsQ29sdW1uTGlzdFwiIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIlxyXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJvcHRpb24ubGFiZWxcIj5cclxuICAgICAgICAgICAgPC9zbWUtb3B0aW9uPlxyXG4gICAgICAgICAgPC9zbWUtZm9ybS1maWVsZD5cclxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXRlbS5jb2x1bW4mJml0ZW0uY29sdW1uLnVuZWRpdGFibGVcIj57e2l0ZW0uY29sdW1uLmxhYmVsfX08L3NwYW4+XHJcbiAgICAgICAgICA8c21lLWxvYWRpbmctd2hlZWwgKm5nSWY9XCJpc0NvbHVtbkRyb3Bkb3duQnVzeVwiIFtpc0JhY2tncm91bmRUcmFuc3BhcmVudF09XCJ0cnVlXCIgc2l6ZT1cImV4dHJhLXNtYWxsXCI+XHJcbiAgICAgICAgICA8L3NtZS1sb2FkaW5nLXdoZWVsPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNDb2x1bW5Ecm9wZG93bkJ1c3lcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzbWUtcXVlcnktZWRpdG9yLW9wZXJhdG9yXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic21lLXF1ZXJ5LWVkaXRvci1vcGVyYXRvclwiXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCIhIWl0ZW0uY29sdW1uLnZhbHVlJiYoaXRlbS52YWx1ZS50eXBlPT09cXVlcnlEYXRhSXRlbVZhbHVlVHlwZS5TaW5nbGVEcm9wZG93bnx8aXRlbS52YWx1ZS50eXBlPT09cXVlcnlEYXRhSXRlbVZhbHVlVHlwZS5NdWx0aVNlbGVjdERyb3Bkb3dufHxpdGVtLnZhbHVlLnR5cGU9PT1xdWVyeURhdGFJdGVtVmFsdWVUeXBlLlRpbWVzcGFuRHJvcGRvd24pXCI+XHJcbiAgICAgICAgICAgICAge3txdWVyeURhdGFPcGVyYW5kLkRyb3Bkb3duc319IDwvc3Bhbj5cclxuICAgICAgICAgICAgPHNtZS1mb3JtLWZpZWxkXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCIhIWl0ZW0uY29sdW1uLnZhbHVlJiYoaXRlbS52YWx1ZS50eXBlPT09cXVlcnlEYXRhSXRlbVZhbHVlVHlwZS5UZXh0SW5wdXQpXCJcclxuICAgICAgICAgICAgICB0eXBlPVwiY29tYm9ib3hcIiBuYW1lPVwib3BlcmFuZFwiIFsobmdNb2RlbCldPVwiaXRlbS5vcGVyYW5kXCJcclxuICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvblF1ZXJ5RWRpdG9yQ2hhbmdlKGluZGV4LCBudWxsLCBudWxsLCB0cnVlKVwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJzbWUtcXVlcnktZWRpdG9yLW9wZXJhdG9yIHNtZS1mb2N1cy16b25lXCJcclxuICAgICAgICAgICAgICBbY2xhc3Muc21lLXF1ZXJ5LWVkaXRvci12YWx1ZS1pcnJlbW92YWJsZV09XCIhIWl0ZW0uaXJyZW1vdmFibGVcIiBbY29tcGFjdF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICBbbWluaW1hbF09XCJ0cnVlXCIgW2Ryb3Bkb3duQXBwbHlGb3JtRmllbGRPZmZzZXRXaWR0aF09XCJmYWxzZVwiPlxyXG4gICAgICAgICAgICAgIDxzbWUtb3B0aW9uICpuZ0Zvcj1cImxldCBvcGVyYW5kIG9mIG9wZXJhbmRzXCIgW3ZhbHVlXT1cIm9wZXJhbmQudmFsdWVcIiBbbGFiZWxdPVwib3BlcmFuZC52YWx1ZVwiPlxyXG4gICAgICAgICAgICAgIDwvc21lLW9wdGlvbj5cclxuICAgICAgICAgICAgPC9zbWUtZm9ybS1maWVsZD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiAqbmdJZj1cIiEhaXRlbT8uY29sdW1uPy52YWx1ZVwiIGNsYXNzPVwic21lLXF1ZXJ5LWVkaXRvci12YWx1ZSBzbWUtZm9jdXMtem9uZVwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZ2V0VGVtcGxhdGUoaXRlbSk7Y29udGV4dDp7JGltcGxpY2l0Oml0ZW0sIGluZGV4OiBpbmRleH1cIj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiICpuZ0lmPVwiIWl0ZW0uaXJyZW1vdmFibGVcIiAobW91c2V1cCk9XCJyZW1vdmVRdWVyeUVkaXRvckl0ZW0oJGV2ZW50LCBpbmRleClcIlxyXG4gICAgICAgICAgICByb2xlPVwiYnV0dG9uXCIgW2F0dHIuYXJpYS1sYWJlbF09XCJyZXNvdXJjZVN0cmluZ3MuRGVsZXRlXCJcclxuICAgICAgICAgICAgKGtleWRvd24uRW50ZXIpPVwicmVtb3ZlUXVlcnlFZGl0b3JJdGVtKCRldmVudCwgaW5kZXgsIHRydWUpXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJzbWUtcXVlcnktZWRpdG9yLXJlbW92ZS1idXR0b24gc21lLWZvY3VzLXpvbmVcIiBbdGFiaW5kZXhdPVwiaXRlbS5pc0VkaXRpbmcgPyAwIDogLTFcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzbWUtaWNvbiBzbWUtcXVlcnktZWRpdG9yLXJlbW92ZS1idXR0b24taWNvblwiPjwvc3Bhbj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L2Zvcm0+XHJcbiAgICA8L2Rpdj5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuICA8ZGl2ICpuZ0lmPVwic2hvd0FkZEJ1dHRvblwiIChtb3VzZXVwKT1cIm5ld1F1ZXJ5RWRpdG9yKCRldmVudClcIiAoa2V5ZG93bi5FbnRlcik9XCJuZXdRdWVyeUVkaXRvcigkZXZlbnQsIHRydWUpXCJcclxuICAgIGNsYXNzPVwic21lLXF1ZXJ5LWVkaXRvci1waWxsIHNtZS1pcnJlbW92YWJsZVwiIHJvbGU9XCJtZW51aXRlbVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInNtZS1xdWVyeS1lZGl0b3ItcGlsbC1jb250ZW50XCIgdGFiaW5kZXg9XCIwXCIgcm9sZT1cImJ1dHRvblwiPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cInNtZS1pY29uIHNtZS1pY29uLWZpbHRlciBzbWUtcXVlcnktZWRpdG9yLWljb25cIj48L3NwYW4+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwic21lLXF1ZXJ5LWVkaXRvci12YWx1ZVwiPnt7cmVzb3VyY2VTdHJpbmdzLk5ld319PC9zcGFuPjwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDxidXR0b24gKm5nSWY9XCJzaG93UmVzZXRCdXR0b25cIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cInJlc2V0UXVlcnlFZGl0b3IoKVwiIGNsYXNzPVwic21lLWJ1dHRvbi10cmlnZ2VyXCJcclxuICAgIHRhYmluZGV4PVwiMFwiIFtkaXNhYmxlZF09XCJkaXNhYmxlUmVzZXRCdXR0b25cIj57e3Jlc291cmNlU3RyaW5ncy5SZXNldH19XHJcbiAgPC9idXR0b24+XHJcbjwvbmctY29udGFpbmVyPlxyXG48ZGl2IGNsYXNzPVwic21lLWxheW91dC1yZWxhdGl2ZVwiICpuZ0lmPVwiaXNMb2FkaW5nXCI+XHJcbiAgPHNtZS1sb2FkaW5nLXdoZWVsIFtpc0JhY2tncm91bmRUcmFuc3BhcmVudF09XCJ0cnVlXCIgc2l6ZT1cInNtYWxsXCI+PC9zbWUtbG9hZGluZy13aGVlbD5cclxuPC9kaXY+XHJcblxyXG48bmctdGVtcGxhdGUgI211bHRpU2VsZWN0VGVtcGxhdGUgbGV0LWl0ZW0gbGV0LWluZGV4PVwiaW5kZXhcIj5cclxuICA8c21lLWZvcm0tZmllbGQgdHlwZT1cImNvbWJvYm94XCIgbmFtZT1cInRlbXBvcmFyeVZhbHVlXCIgWyhuZ01vZGVsKV09XCJpdGVtLnZhbHVlLnRlbXBvcmFyeVZhbHVlXCJcclxuICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uUXVlcnlFZGl0b3JDaGFuZ2UoaW5kZXgsIG51bGwsIHRydWUpXCIgW211bHRpcGxlXT1cInRydWVcIiBbbWluaW1hbF09XCJ0cnVlXCIgW2NvbXBhY3RdPVwidHJ1ZVwiXHJcbiAgICBbcGxhY2Vob2xkZXJdPVwicmVzb3VyY2VTdHJpbmdzLlNlbGVjdFZhbHVlXCIgKGtleWRvd24uRW50ZXIpPVwib25WYWx1ZUZpZWxkRW50ZXJLZXlkb3duKCRldmVudCwgaW5kZXgpXCJcclxuICAgIFtzZWFyY2hhYmxlXT1cIiEhaXRlbS52YWx1ZS5zZWFyY2hhYmxlXCIgW2Ryb3Bkb3duQXBwbHlGb3JtRmllbGRPZmZzZXRXaWR0aF09XCJmYWxzZVwiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbkRyb3Bkb3duRGF0YSAmJiBjb2x1bW5Ecm9wZG93bkRhdGEubGVuZ3RoID4gMFwiPlxyXG4gICAgICA8c21lLW9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGNvbHVtbkRyb3Bkb3duRGF0YVwiIFt2YWx1ZV09XCJvcHRpb25cIiBbbGFiZWxdPVwib3B0aW9uXCI+XHJcbiAgICAgIDwvc21lLW9wdGlvbj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gIDwvc21lLWZvcm0tZmllbGQ+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI3RleHRUZW1wbGF0ZSBsZXQtaXRlbSBsZXQtaW5kZXg9XCJpbmRleFwiPlxyXG4gIDxzbWUtZm9ybS1maWVsZCB0eXBlPVwidGV4dFwiIG5hbWU9XCJ0ZW1wb3JhcnlWYWx1ZVwiIFsobmdNb2RlbCldPVwiaXRlbS52YWx1ZS50ZW1wb3JhcnlWYWx1ZVwiXHJcbiAgICAobmdNb2RlbENoYW5nZSk9XCJvblF1ZXJ5RWRpdG9yQ2hhbmdlKGluZGV4LCBudWxsLCB0cnVlKVwiIFttaW5pbWFsXT1cInRydWVcIiBbY29tcGFjdF09XCJ0cnVlXCJcclxuICAgIChrZXlkb3duLkVudGVyKT1cIm9uVmFsdWVGaWVsZEVudGVyS2V5ZG93bigkZXZlbnQsIGluZGV4KVwiIFtwbGFjZWhvbGRlcl09XCJyZXNvdXJjZVN0cmluZ3MuU2VsZWN0VmFsdWVcIj5cclxuICA8L3NtZS1mb3JtLWZpZWxkPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNzaW5nbGVTZWxlY3RUZW1wbGF0ZSBsZXQtaXRlbSBsZXQtaW5kZXg9XCJpbmRleFwiPlxyXG4gIDxzbWUtZm9ybS1maWVsZCB0eXBlPVwiY29tYm9ib3hcIiBuYW1lPVwidGVtcG9yYXJ5VmFsdWVcIiBbKG5nTW9kZWwpXT1cIml0ZW0udmFsdWUudGVtcG9yYXJ5VmFsdWVcIlxyXG4gICAgKG5nTW9kZWxDaGFuZ2UpPVwib25RdWVyeUVkaXRvckNoYW5nZShpbmRleCwgbnVsbCwgdHJ1ZSlcIiBbbWluaW1hbF09XCJ0cnVlXCIgW2NvbXBhY3RdPVwidHJ1ZVwiXHJcbiAgICBbcGxhY2Vob2xkZXJdPVwicmVzb3VyY2VTdHJpbmdzLlNlbGVjdFZhbHVlXCIgKGtleWRvd24uRW50ZXIpPVwib25WYWx1ZUZpZWxkRW50ZXJLZXlkb3duKCRldmVudCwgaW5kZXgpXCJcclxuICAgIFtzZWFyY2hhYmxlXT1cIiEhaXRlbS52YWx1ZS5zZWFyY2hhYmxlXCIgW2Ryb3Bkb3duQXBwbHlGb3JtRmllbGRPZmZzZXRXaWR0aF09XCJmYWxzZVwiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbkRyb3Bkb3duRGF0YSAmJiBjb2x1bW5Ecm9wZG93bkRhdGEubGVuZ3RoID4gMFwiPlxyXG4gICAgICA8c21lLW9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGNvbHVtbkRyb3Bkb3duRGF0YVwiIFt2YWx1ZV09XCJvcHRpb25cIiBbbGFiZWxdPVwib3B0aW9uXCI+XHJcbiAgICAgIDwvc21lLW9wdGlvbj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gIDwvc21lLWZvcm0tZmllbGQ+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI3RpbWVzcGFuU2VsZWN0VGVtcGxhdGUgbGV0LWl0ZW0gbGV0LWluZGV4PVwiaW5kZXhcIj5cclxuICA8c21lLWZvcm0tZmllbGQgdHlwZT1cImRhdGV0aW1lcmFuZ2VcIiBuYW1lPVwidGVtcG9yYXJ5VmFsdWVcIiBbKG5nTW9kZWwpXT1cIml0ZW0udmFsdWUudGVtcG9yYXJ5VmFsdWVcIlxyXG4gICAgKG5nTW9kZWxDaGFuZ2UpPVwib25RdWVyeUVkaXRvckNoYW5nZShpbmRleCwgbnVsbCwgdHJ1ZSlcIiBbbWluaW1hbF09XCJ0cnVlXCIgW2NvbXBhY3RdPVwidHJ1ZVwiXHJcbiAgICBbcGxhY2Vob2xkZXJdPVwicmVzb3VyY2VTdHJpbmdzLlNlbGVjdFZhbHVlXCIgKGtleWRvd24uRW50ZXIpPVwib25WYWx1ZUZpZWxkRW50ZXJLZXlkb3duKCRldmVudCwgaW5kZXgpXCJcclxuICAgIFtkcm9wZG93bkFwcGx5Rm9ybUZpZWxkT2Zmc2V0V2lkdGhdPVwiZmFsc2VcIiAoY3VzdG9tTGFiZWxFbWl0dGVyKT1cIm9uQ3VzdG9tTGFiZWxFbWl0KCRldmVudClcIj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW5Ecm9wZG93bkRhdGEgJiYgY29sdW1uRHJvcGRvd25EYXRhLmxlbmd0aCA+IDBcIj5cclxuICAgICAgPHNtZS1kYXRlLXJhbmdlLW9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGNvbHVtbkRyb3Bkb3duRGF0YVwiIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIlxyXG4gICAgICAgIFtsYWJlbF09XCJvcHRpb24ubGFiZWxcIj5cclxuICAgICAgPC9zbWUtZGF0ZS1yYW5nZS1vcHRpb24+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICA8L3NtZS1mb3JtLWZpZWxkPlxyXG48L25nLXRlbXBsYXRlPlxyXG4iXX0=
|