@hmcts/ccd-case-ui-toolkit 6.10.6-angular-upgrade-r4 → 6.10.7-rollback-case-link
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/hmcts-ccd-case-ui-toolkit.umd.js +240 -2881
- package/bundles/hmcts-ccd-case-ui-toolkit.umd.js.map +1 -1
- package/bundles/hmcts-ccd-case-ui-toolkit.umd.min.js +1 -1
- package/bundles/hmcts-ccd-case-ui-toolkit.umd.min.js.map +1 -1
- package/esm2015/lib/shared/commons/case-edit-data/case-edit-data.service.js +1 -9
- package/esm2015/lib/shared/components/case-editor/case-edit-page/case-edit-page.component.js +7 -17
- package/esm2015/lib/shared/components/case-editor/services/cases.service.js +1 -28
- package/esm2015/lib/shared/components/case-editor/services/page-validation.service.js +2 -10
- package/esm2015/lib/shared/components/palette/base-field/abstract-form-field.component.js +2 -4
- package/esm2015/lib/shared/components/palette/case-file-view/case-file-view-field-read.component.js +4 -4
- package/esm2015/lib/shared/components/palette/case-file-view/case-file-view-field.component.js +4 -4
- package/esm2015/lib/shared/components/palette/case-file-view/components/case-file-view-folder/case-file-view-folder.component.js +3 -4
- package/esm2015/lib/shared/components/palette/case-file-view/components/case-file-view-folder-selector/case-file-view-folder-selector.component.js +26 -25
- package/esm2015/lib/shared/components/palette/case-link/index.js +1 -4
- package/esm2015/lib/shared/components/palette/case-link/read-case-link-field.component.js +8 -28
- package/esm2015/lib/shared/components/palette/case-link/write-case-link-field.component.js +66 -77
- package/esm2015/lib/shared/components/palette/palette.module.js +22 -68
- package/esm2015/lib/shared/components/palette/palette.service.js +4 -12
- package/esm2015/lib/shared/components/palette/utils/is-compound.pipe.js +1 -10
- package/esm2015/lib/shared/domain/definition/field-type-enum.model.js +1 -1
- package/esm2015/lib/shared/pipes/complex/ccd-read-fields-filter.pipe.js +1 -5
- package/esm2015/lib/shared/pipes/index.js +1 -2
- package/esm2015/lib/shared/pipes/pipes.module.js +4 -8
- package/esm2015/lib/shared/services/fields/fields.utils.js +1 -7
- package/fesm2015/hmcts-ccd-case-ui-toolkit.js +233 -2585
- package/fesm2015/hmcts-ccd-case-ui-toolkit.js.map +1 -1
- package/lib/shared/commons/case-edit-data/case-edit-data.service.d.ts +0 -5
- package/lib/shared/commons/case-edit-data/case-edit-data.service.d.ts.map +1 -1
- package/lib/shared/components/case-editor/case-edit-page/case-edit-page.component.d.ts +0 -2
- package/lib/shared/components/case-editor/case-edit-page/case-edit-page.component.d.ts.map +1 -1
- package/lib/shared/components/case-editor/services/cases.service.d.ts +0 -7
- package/lib/shared/components/case-editor/services/cases.service.d.ts.map +1 -1
- package/lib/shared/components/case-editor/services/page-validation.service.d.ts +0 -1
- package/lib/shared/components/case-editor/services/page-validation.service.d.ts.map +1 -1
- package/lib/shared/components/palette/base-field/abstract-form-field.component.d.ts.map +1 -1
- package/lib/shared/components/palette/case-file-view/components/case-file-view-folder/case-file-view-folder.component.d.ts.map +1 -1
- package/lib/shared/components/palette/case-file-view/components/case-file-view-folder-selector/case-file-view-folder-selector.component.d.ts.map +1 -1
- package/lib/shared/components/palette/case-link/index.d.ts +0 -3
- package/lib/shared/components/palette/case-link/index.d.ts.map +1 -1
- package/lib/shared/components/palette/case-link/read-case-link-field.component.d.ts +0 -3
- package/lib/shared/components/palette/case-link/read-case-link-field.component.d.ts.map +1 -1
- package/lib/shared/components/palette/case-link/write-case-link-field.component.d.ts +4 -13
- package/lib/shared/components/palette/case-link/write-case-link-field.component.d.ts.map +1 -1
- package/lib/shared/components/palette/palette.module.d.ts +58 -67
- package/lib/shared/components/palette/palette.module.d.ts.map +1 -1
- package/lib/shared/components/palette/palette.service.d.ts.map +1 -1
- package/lib/shared/components/palette/utils/is-compound.pipe.d.ts +0 -1
- package/lib/shared/components/palette/utils/is-compound.pipe.d.ts.map +1 -1
- package/lib/shared/domain/definition/field-type-enum.model.d.ts +1 -1
- package/lib/shared/domain/definition/field-type-enum.model.d.ts.map +1 -1
- package/lib/shared/pipes/complex/ccd-read-fields-filter.pipe.d.ts.map +1 -1
- package/lib/shared/pipes/index.d.ts +0 -1
- package/lib/shared/pipes/index.d.ts.map +1 -1
- package/lib/shared/pipes/pipes.module.d.ts +2 -3
- package/lib/shared/pipes/pipes.module.d.ts.map +1 -1
- package/lib/shared/services/fields/fields.utils.d.ts +0 -1
- package/lib/shared/services/fields/fields.utils.d.ts.map +1 -1
- package/package.json +1 -1
- package/esm2015/lib/shared/components/palette/case-link/components/before-you-start/before-you-start.component.js +0 -125
- package/esm2015/lib/shared/components/palette/case-link/components/check-your-answers/check-your-answers.component.js +0 -198
- package/esm2015/lib/shared/components/palette/case-link/components/index.js +0 -10
- package/esm2015/lib/shared/components/palette/case-link/components/link-cases/link-cases.component.js +0 -497
- package/esm2015/lib/shared/components/palette/case-link/components/linked-cases-table/linked-cases-from-table.component.js +0 -221
- package/esm2015/lib/shared/components/palette/case-link/components/linked-cases-table/linked-cases-to-table.component.js +0 -286
- package/esm2015/lib/shared/components/palette/case-link/components/no-linked-cases/no-linked-cases.component.js +0 -76
- package/esm2015/lib/shared/components/palette/case-link/components/read-linked-cases.component.js +0 -178
- package/esm2015/lib/shared/components/palette/case-link/components/unlink-cases/unlink-cases.component.js +0 -216
- package/esm2015/lib/shared/components/palette/case-link/components/write-linked-cases.component.js +0 -265
- package/esm2015/lib/shared/components/palette/case-link/domain/index.js +0 -3
- package/esm2015/lib/shared/components/palette/case-link/domain/linked-cases-state.model.js +0 -2
- package/esm2015/lib/shared/components/palette/case-link/domain/linked-cases.model.js +0 -19
- package/esm2015/lib/shared/components/palette/case-link/enums/index.js +0 -2
- package/esm2015/lib/shared/components/palette/case-link/enums/write-linked-cases-field.enum.js +0 -33
- package/esm2015/lib/shared/components/palette/case-link/services/index.js +0 -2
- package/esm2015/lib/shared/components/palette/case-link/services/linked-cases.service.js +0 -134
- package/esm2015/lib/shared/components/palette/case-link/utils/validators.utils.js +0 -27
- package/esm2015/lib/shared/pipes/link-cases-reason-code/ccd-link-cases-reason-code.pipe.js +0 -23
- package/esm2015/lib/shared/pipes/link-cases-reason-code/index.js +0 -2
- package/lib/shared/components/palette/case-link/components/before-you-start/before-you-start.component.d.ts +0 -19
- package/lib/shared/components/palette/case-link/components/before-you-start/before-you-start.component.d.ts.map +0 -1
- package/lib/shared/components/palette/case-link/components/check-your-answers/check-your-answers.component.d.ts +0 -18
- package/lib/shared/components/palette/case-link/components/check-your-answers/check-your-answers.component.d.ts.map +0 -1
- package/lib/shared/components/palette/case-link/components/index.d.ts +0 -10
- package/lib/shared/components/palette/case-link/components/index.d.ts.map +0 -1
- package/lib/shared/components/palette/case-link/components/link-cases/link-cases.component.d.ts +0 -45
- package/lib/shared/components/palette/case-link/components/link-cases/link-cases.component.d.ts.map +0 -1
- package/lib/shared/components/palette/case-link/components/linked-cases-table/linked-cases-from-table.component.d.ts +0 -42
- package/lib/shared/components/palette/case-link/components/linked-cases-table/linked-cases-from-table.component.d.ts.map +0 -1
- package/lib/shared/components/palette/case-link/components/linked-cases-table/linked-cases-to-table.component.d.ts +0 -45
- package/lib/shared/components/palette/case-link/components/linked-cases-table/linked-cases-to-table.component.d.ts.map +0 -1
- package/lib/shared/components/palette/case-link/components/no-linked-cases/no-linked-cases.component.d.ts +0 -12
- package/lib/shared/components/palette/case-link/components/no-linked-cases/no-linked-cases.component.d.ts.map +0 -1
- package/lib/shared/components/palette/case-link/components/read-linked-cases.component.d.ts +0 -37
- package/lib/shared/components/palette/case-link/components/read-linked-cases.component.d.ts.map +0 -1
- package/lib/shared/components/palette/case-link/components/unlink-cases/unlink-cases.component.d.ts +0 -38
- package/lib/shared/components/palette/case-link/components/unlink-cases/unlink-cases.component.d.ts.map +0 -1
- package/lib/shared/components/palette/case-link/components/write-linked-cases.component.d.ts +0 -45
- package/lib/shared/components/palette/case-link/components/write-linked-cases.component.d.ts.map +0 -1
- package/lib/shared/components/palette/case-link/domain/index.d.ts +0 -3
- package/lib/shared/components/palette/case-link/domain/index.d.ts.map +0 -1
- package/lib/shared/components/palette/case-link/domain/linked-cases-state.model.d.ts +0 -12
- package/lib/shared/components/palette/case-link/domain/linked-cases-state.model.d.ts.map +0 -1
- package/lib/shared/components/palette/case-link/domain/linked-cases.model.d.ts +0 -65
- package/lib/shared/components/palette/case-link/domain/linked-cases.model.d.ts.map +0 -1
- package/lib/shared/components/palette/case-link/enums/index.d.ts +0 -2
- package/lib/shared/components/palette/case-link/enums/index.d.ts.map +0 -1
- package/lib/shared/components/palette/case-link/enums/write-linked-cases-field.enum.d.ts +0 -29
- package/lib/shared/components/palette/case-link/enums/write-linked-cases-field.enum.d.ts.map +0 -1
- package/lib/shared/components/palette/case-link/services/index.d.ts +0 -2
- package/lib/shared/components/palette/case-link/services/index.d.ts.map +0 -1
- package/lib/shared/components/palette/case-link/services/linked-cases.service.d.ts +0 -50
- package/lib/shared/components/palette/case-link/services/linked-cases.service.d.ts.map +0 -1
- package/lib/shared/components/palette/case-link/utils/validators.utils.d.ts +0 -10
- package/lib/shared/components/palette/case-link/utils/validators.utils.d.ts.map +0 -1
- package/lib/shared/pipes/link-cases-reason-code/ccd-link-cases-reason-code.pipe.d.ts +0 -11
- package/lib/shared/pipes/link-cases-reason-code/ccd-link-cases-reason-code.pipe.d.ts.map +0 -1
- package/lib/shared/pipes/link-cases-reason-code/index.d.ts +0 -2
- package/lib/shared/pipes/link-cases-reason-code/index.d.ts.map +0 -1
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
export * from './case-reference';
|
|
2
2
|
export * from './case-title';
|
|
3
3
|
export * from './complex';
|
|
4
|
-
export * from './link-cases-reason-code';
|
|
5
4
|
export * from './pipes.module';
|
|
6
5
|
export * from './search-result/sorting/sort-search-result.pipe';
|
|
7
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jY2QtY2FzZS11aS10b29sa2l0L3NyYy9saWIvc2hhcmVkL3BpcGVzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxXQUFXLENBQUM7QUFDMUIsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLGlEQUFpRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9jYXNlLXJlZmVyZW5jZSc7XG5leHBvcnQgKiBmcm9tICcuL2Nhc2UtdGl0bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9jb21wbGV4JztcbmV4cG9ydCAqIGZyb20gJy4vcGlwZXMubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vc2VhcmNoLXJlc3VsdC9zb3J0aW5nL3NvcnQtc2VhcmNoLXJlc3VsdC5waXBlJztcbiJdfQ==
|
|
@@ -3,7 +3,6 @@ import { NgModule } from '@angular/core';
|
|
|
3
3
|
import { CaseReferencePipe } from './case-reference';
|
|
4
4
|
import { CcdCaseTitlePipe } from './case-title';
|
|
5
5
|
import { CcdCollectionTableCaseFieldsFilterPipe, CcdCYAPageLabelFilterPipe, CcdPageFieldsPipe, CcdTabFieldsPipe, ReadFieldsFilterPipe } from './complex';
|
|
6
|
-
import { LinkCasesReasonValuePipe } from './link-cases-reason-code';
|
|
7
6
|
import { SortSearchResultPipe } from './search-result/sorting/sort-search-result.pipe';
|
|
8
7
|
import * as i0 from "@angular/core";
|
|
9
8
|
const pipeDeclarations = [
|
|
@@ -14,8 +13,7 @@ const pipeDeclarations = [
|
|
|
14
13
|
CcdCYAPageLabelFilterPipe,
|
|
15
14
|
ReadFieldsFilterPipe,
|
|
16
15
|
CcdTabFieldsPipe,
|
|
17
|
-
CcdPageFieldsPipe
|
|
18
|
-
LinkCasesReasonValuePipe
|
|
16
|
+
CcdPageFieldsPipe
|
|
19
17
|
];
|
|
20
18
|
export class PipesModule {
|
|
21
19
|
}
|
|
@@ -31,16 +29,14 @@ PipesModule.ɵinj = i0.ɵɵdefineInjector({ imports: [[
|
|
|
31
29
|
CcdCYAPageLabelFilterPipe,
|
|
32
30
|
ReadFieldsFilterPipe,
|
|
33
31
|
CcdTabFieldsPipe,
|
|
34
|
-
CcdPageFieldsPipe,
|
|
35
|
-
LinkCasesReasonValuePipe], imports: [CommonModule], exports: [CaseReferencePipe,
|
|
32
|
+
CcdPageFieldsPipe], imports: [CommonModule], exports: [CaseReferencePipe,
|
|
36
33
|
SortSearchResultPipe,
|
|
37
34
|
CcdCaseTitlePipe,
|
|
38
35
|
CcdCollectionTableCaseFieldsFilterPipe,
|
|
39
36
|
CcdCYAPageLabelFilterPipe,
|
|
40
37
|
ReadFieldsFilterPipe,
|
|
41
38
|
CcdTabFieldsPipe,
|
|
42
|
-
CcdPageFieldsPipe
|
|
43
|
-
LinkCasesReasonValuePipe] }); })();
|
|
39
|
+
CcdPageFieldsPipe] }); })();
|
|
44
40
|
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PipesModule, [{
|
|
45
41
|
type: NgModule,
|
|
46
42
|
args: [{
|
|
@@ -55,4 +51,4 @@ PipesModule.ɵinj = i0.ɵɵdefineInjector({ imports: [[
|
|
|
55
51
|
]
|
|
56
52
|
}]
|
|
57
53
|
}], null, null); })();
|
|
58
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZXMubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2NkLWNhc2UtdWktdG9vbGtpdC9zcmMvbGliL3NoYXJlZC9waXBlcy9waXBlcy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDckQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2hELE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSx5QkFBeUIsRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUN6SixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpREFBaUQsQ0FBQzs7QUFFdkYsTUFBTSxnQkFBZ0IsR0FBRztJQUN2QixpQkFBaUI7SUFDakIsb0JBQW9CO0lBQ3BCLGdCQUFnQjtJQUNoQixzQ0FBc0M7SUFDdEMseUJBQXlCO0lBQ3pCLG9CQUFvQjtJQUNwQixnQkFBZ0I7SUFDaEIsaUJBQWlCO0NBQ2xCLENBQUM7QUFhRixNQUFNLE9BQU8sV0FBVzs7c0VBQVgsV0FBVzsrQ0FBWCxXQUFXO21EQVZiO1lBQ1AsWUFBWTtTQUNiO3dGQVFVLFdBQVcsbUJBckJ0QixpQkFBaUI7UUFDakIsb0JBQW9CO1FBQ3BCLGdCQUFnQjtRQUNoQixzQ0FBc0M7UUFDdEMseUJBQXlCO1FBQ3pCLG9CQUFvQjtRQUNwQixnQkFBZ0I7UUFDaEIsaUJBQWlCLGFBS2YsWUFBWSxhQVpkLGlCQUFpQjtRQUNqQixvQkFBb0I7UUFDcEIsZ0JBQWdCO1FBQ2hCLHNDQUFzQztRQUN0Qyx5QkFBeUI7UUFDekIsb0JBQW9CO1FBQ3BCLGdCQUFnQjtRQUNoQixpQkFBaUI7dUZBY04sV0FBVztjQVh2QixRQUFRO2VBQUM7Z0JBQ1IsT0FBTyxFQUFFO29CQUNQLFlBQVk7aUJBQ2I7Z0JBQ0QsWUFBWSxFQUFFO29CQUNaLEdBQUcsZ0JBQWdCO2lCQUNwQjtnQkFDRCxPQUFPLEVBQUU7b0JBQ1AsR0FBRyxnQkFBZ0I7aUJBQ3BCO2FBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENhc2VSZWZlcmVuY2VQaXBlIH0gZnJvbSAnLi9jYXNlLXJlZmVyZW5jZSc7XG5pbXBvcnQgeyBDY2RDYXNlVGl0bGVQaXBlIH0gZnJvbSAnLi9jYXNlLXRpdGxlJztcbmltcG9ydCB7IENjZENvbGxlY3Rpb25UYWJsZUNhc2VGaWVsZHNGaWx0ZXJQaXBlLCBDY2RDWUFQYWdlTGFiZWxGaWx0ZXJQaXBlLCBDY2RQYWdlRmllbGRzUGlwZSwgQ2NkVGFiRmllbGRzUGlwZSwgUmVhZEZpZWxkc0ZpbHRlclBpcGUgfSBmcm9tICcuL2NvbXBsZXgnO1xuaW1wb3J0IHsgU29ydFNlYXJjaFJlc3VsdFBpcGUgfSBmcm9tICcuL3NlYXJjaC1yZXN1bHQvc29ydGluZy9zb3J0LXNlYXJjaC1yZXN1bHQucGlwZSc7XG5cbmNvbnN0IHBpcGVEZWNsYXJhdGlvbnMgPSBbXG4gIENhc2VSZWZlcmVuY2VQaXBlLFxuICBTb3J0U2VhcmNoUmVzdWx0UGlwZSxcbiAgQ2NkQ2FzZVRpdGxlUGlwZSxcbiAgQ2NkQ29sbGVjdGlvblRhYmxlQ2FzZUZpZWxkc0ZpbHRlclBpcGUsXG4gIENjZENZQVBhZ2VMYWJlbEZpbHRlclBpcGUsXG4gIFJlYWRGaWVsZHNGaWx0ZXJQaXBlLFxuICBDY2RUYWJGaWVsZHNQaXBlLFxuICBDY2RQYWdlRmllbGRzUGlwZVxuXTtcblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgXSxcbiAgZGVjbGFyYXRpb25zOiBbXG4gICAgLi4ucGlwZURlY2xhcmF0aW9uc1xuICBdLFxuICBleHBvcnRzOiBbXG4gICAgLi4ucGlwZURlY2xhcmF0aW9uc1xuICBdXG59KVxuZXhwb3J0IGNsYXNzIFBpcGVzTW9kdWxlIHt9XG4iXX0=
|
|
@@ -52,12 +52,6 @@ export class FieldsUtils {
|
|
|
52
52
|
static isCollectionWithValue(pageFormFields) {
|
|
53
53
|
return pageFormFields[0]['value'] !== undefined;
|
|
54
54
|
}
|
|
55
|
-
static isLinkedCasesCaseField(caseField) {
|
|
56
|
-
if (!caseField) {
|
|
57
|
-
return false;
|
|
58
|
-
}
|
|
59
|
-
return caseField.field_type.collection_field_type.id === 'CaseLink';
|
|
60
|
-
}
|
|
61
55
|
static cloneObject(obj) {
|
|
62
56
|
return Object.assign({}, obj);
|
|
63
57
|
}
|
|
@@ -555,4 +549,4 @@ FieldsUtils.ɵprov = i0.ɵɵdefineInjectable({ token: FieldsUtils, factory: Fiel
|
|
|
555
549
|
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(FieldsUtils, [{
|
|
556
550
|
type: Injectable
|
|
557
551
|
}], null, null); })();
|
|
558
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGRzLnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2NkLWNhc2UtdWktdG9vbGtpdC9zcmMvbGliL3NoYXJlZC9zZXJ2aWNlcy9maWVsZHMvZmllbGRzLnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBbUIsU0FBUyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUkxRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0VBQWdFLENBQUM7QUFDaEcsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzFELE9BQU8sRUFBb0IsU0FBUyxFQUF5RSxNQUFNLGNBQWMsQ0FBQztBQUNsSSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQzs7QUFFbkYsV0FBVztBQUVYLE1BQU0sT0FBTyxXQUFXO0lBWWYsTUFBTSxDQUFDLGtCQUFrQixDQUFDLEdBQVE7UUFDdkMsSUFBSSxDQUFDLENBQUMsR0FBRyxZQUFZLFNBQVMsQ0FBQyxFQUFFO1lBQy9CLE9BQU8scUJBQXFCLENBQUMsSUFBSSxTQUFTLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztTQUNwRDtRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVNLE1BQU0sQ0FBQyxXQUFXLENBQUMsVUFBdUI7UUFDL0MsTUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDekIsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxXQUFXLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZELENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVNLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBUztRQUM3QixPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVNLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBUztRQUM5QixPQUFPLE9BQU8sSUFBSSxLQUFLLFFBQVEsSUFBSSxJQUFJLEtBQUssSUFBSSxDQUFDO0lBQ25ELENBQUM7SUFFTSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsSUFBUztRQUN0QyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFTSxNQUFNLENBQUMsT0FBTyxDQUFDLElBQVM7UUFDN0IsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFTSxNQUFNLENBQUMsK0JBQStCLENBQUMsVUFBaUI7UUFDN0QsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxTQUFTLENBQUM7SUFDbEksQ0FBQztJQUVNLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxVQUFlO1FBQ3JELE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsSUFBSSxJQUFJLENBQUMsK0JBQStCLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDM0YsQ0FBQztJQUVNLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxJQUFTO1FBQ3hDLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBRU0sTUFBTSxDQUFDLGVBQWUsQ0FBQyxjQUFtQjtRQUMvQyxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLElBQUksY0FBYyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsQ0FBQztJQUMxRSxDQUFDO0lBRU0sTUFBTSxDQUFDLFlBQVksQ0FBQyxjQUFtQjtRQUM1QyxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLElBQUksSUFBSSxDQUFDLHFCQUFxQixDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzVGLENBQUM7SUFFTSxNQUFNLENBQUMscUJBQXFCLENBQUMsY0FBcUI7UUFDdkQsT0FBTyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssU0FBUyxDQUFDO0lBQ2xELENBQUM7SUFFTSxNQUFNLENBQUMsc0JBQXNCLENBQUMsU0FBb0I7UUFDdkQsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNkLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFDRCxPQUFPLFNBQVMsQ0FBQyxVQUFVLENBQUMscUJBQXFCLENBQUMsRUFBRSxLQUFLLFVBQVUsQ0FBQztJQUN0RSxDQUFDO0lBRU0sTUFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFRO1FBQ2hDLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELDBFQUEwRTtJQUNuRSxNQUFNLENBQUMsYUFBYSxDQUFDLFFBQWtCO1FBQzVDLE1BQU0sY0FBYyxHQUFnQixRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQWdCLEVBQUUsR0FBWSxFQUFFLEVBQUU7WUFDMUYsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNoQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFUCxNQUFNLGNBQWMsR0FBZ0IsUUFBUSxDQUFDLGNBQWMsQ0FBQztRQUM1RCxPQUFPLGNBQWMsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQW9CLEVBQUUsRUFBRTtZQUMxRSxPQUFPLGNBQWMsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsRUFBRSxLQUFLLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDMUYsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7SUFFTSxNQUFNLENBQUMsa0NBQWtDLENBQUUsQ0FBa0IsRUFBRSxFQUFhLEVBQUUsSUFBZ0M7UUFDbkgsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNwQixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3hCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxNQUFjO1FBQ2pELElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDWCxPQUFPLEtBQUssQ0FBQztTQUNkO1FBQ0QsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMzRCxNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFDdEIsbUhBQW1IO1FBQ25ILCtHQUErRztRQUMvRywwQ0FBMEM7UUFDMUMsTUFBTSxtQkFBbUIsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSTtZQUNyRCxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssUUFBUSxJQUFJLENBQUMsQ0FBQyxXQUFXLEtBQUssTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7Z0JBQ3RFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUNyQixDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQzNDLENBQUMsQ0FBQztRQUNILE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQztJQUMzRyxDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0ssTUFBTSxDQUFDLHdCQUF3QixDQUFDLFFBQXNDO1FBRTVFLElBQUksUUFBUSxDQUFDLFdBQVcsRUFBRTtZQUN4QixRQUFRLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRTtnQkFDdkMsSUFBSSxTQUFTLENBQUMsVUFBVSxFQUFFO29CQUN4QixJQUFJLENBQUMsd0JBQXdCLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUM7aUJBQzNFO1lBQ0gsQ0FBQyxDQUFDLENBQUM7U0FDSjtRQUVELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFTyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQWdCO1FBQzFDLElBQUksS0FBSyxDQUFDLEtBQUssRUFBRTtZQUNmLE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQztTQUNwQjthQUFNLElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRSxFQUFFO1lBQzVCLE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQztZQUNwQixLQUFLLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLEVBQUU7Z0JBQ3JELFFBQVEsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLEdBQUcsV0FBVyxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNyRSxDQUFDLENBQUMsQ0FBQztZQUNILE9BQU8sUUFBUSxDQUFDO1NBQ2pCO0lBQ0gsQ0FBQztJQXNGRDs7Ozs7T0FLRztJQUNLLE1BQU0sQ0FBQyxXQUFXLENBQUMsVUFBZTtRQUN4QyxPQUFPLFVBQVUsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsVUFBVSxHQUFHLEdBQUcsRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQztJQUN6RyxDQUFDO0lBRU8sTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFxQjtRQUMzQyxPQUFPLFVBQVUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQzVDLENBQUM7SUFFTyxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQWtCO1FBQ3ZDLElBQUk7WUFDRiw2RkFBNkY7WUFDN0YsNkdBQTZHO1lBQzdHLDJEQUEyRDtZQUMzRCx3RkFBd0Y7WUFDeEYsT0FBTyxXQUFXLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLFlBQVksQ0FBQyxDQUFDO1NBQ3ZFO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDVixPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUM7U0FDckQ7SUFDSCxDQUFDO0lBRU8sTUFBTSxDQUFDLDhCQUE4QixDQUFDLEtBQWdCLEVBQUUsSUFBWTtRQUMxRSxNQUFNLFlBQVksR0FBa0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNySCxPQUFPLFlBQVksQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ2hELENBQUM7SUFFTyxNQUFNLENBQUMsbUJBQW1CLENBQUMsSUFBWSxFQUFFLFlBQW9CO1FBQ25FLE9BQU8sYUFBYSxJQUFJLEtBQUssWUFBWSxJQUFJLENBQUM7SUFDaEQsQ0FBQztJQUVPLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxTQUFvQixFQUFFLGFBQXdCLEVBQUUsYUFBd0I7UUFDOUcsSUFBSSxhQUFhLENBQUMsSUFBSSxLQUFLLFdBQVcsQ0FBQyxrQ0FBa0MsRUFBRTtZQUV6RSxhQUFhLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDM0MsSUFBSTtvQkFDRixNQUFNLGNBQWMsR0FBRyxXQUFXLENBQUMsNENBQTRDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7b0JBRXRILElBQUksY0FBYyxFQUFFO3dCQUNsQixNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQzt3QkFDakYsSUFBSSxnQkFBZ0IsRUFBRTs0QkFDcEIsTUFBTSxVQUFVLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDOzRCQUNsRCxNQUFNLFlBQVksR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7NEJBQzlELE1BQU0sS0FBSyxHQUFHO2dDQUNaLFVBQVU7Z0NBQ1YsS0FBSyxFQUFFLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFNBQVM7NkJBQzFELENBQUM7NEJBQ0YsS0FBSyxDQUFDLEtBQUsscUJBQ04sS0FBSyxDQUNULENBQUM7NEJBQ0YsS0FBSyxDQUFDLGVBQWUsbUNBQ2hCLEtBQUssQ0FBQyxlQUFlLEdBQ3JCLEtBQUssQ0FDVCxDQUFDO3lCQUNIO3FCQUNGO3lCQUFNO3dCQUNMLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLFVBQVUsRUFBRSxhQUFhLENBQUMsQ0FBQztxQkFDdkU7aUJBQ0Y7Z0JBQUMsT0FBTyxLQUFLLEVBQUU7b0JBQ2QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztpQkFDcEI7WUFDSCxDQUFDLENBQUMsQ0FBQztTQUNKO2FBQU0sSUFBSSxhQUFhLENBQUMsSUFBSSxLQUFLLFdBQVcsQ0FBQyxxQ0FBcUMsRUFBRTtZQUNuRixJQUFJLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRTtnQkFDdkMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFNBQVMsRUFBRSxhQUFhLENBQUMscUJBQXFCLEVBQUUsYUFBYSxDQUFDLENBQUM7YUFDOUY7U0FDRjtJQUNILENBQUM7SUFFTyxNQUFNLENBQUMsbUJBQW1CLENBQUMsU0FBYyxFQUFFLEdBQVc7UUFFNUQsTUFBTSxJQUFJLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBRTVFLE9BQU8sSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ3ZDLENBQUM7SUFFTyxNQUFNLENBQUMsb0JBQW9CLENBQUMsUUFBYSxFQUFFLEdBQVcsRUFBRSxTQUFnQixFQUFFO1FBQ2hGLElBQUksUUFBUSxJQUFJLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUM3QixNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQzVCO2FBQU87WUFDTixLQUFLLE1BQU0sVUFBVSxJQUFJLFFBQVEsRUFBRTtnQkFDakMsSUFBSSxPQUFPLFFBQVEsS0FBSyxRQUFRLElBQUksUUFBUSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsRUFBRTtvQkFDdkUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7aUJBQzlEO2FBQ0Y7U0FDRjtRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsU0FBb0I7UUFDakQsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNkLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFFRCxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVNLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxTQUFvQjtRQUN4RCxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2QsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUVELE9BQU8sU0FBUyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEtBQUssY0FBYyxDQUFDO0lBQ3RELENBQUM7SUFFTSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsU0FBb0I7UUFDakQsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNkLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFFRCwrR0FBK0c7UUFDL0csZ0JBQWdCO1FBQ2hCLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxLQUFLLFNBQVMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEtBQUssVUFBVSxJQUFJLFNBQVMsQ0FBQyxFQUFFLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNyRyxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7T0FnQkc7SUFDSSxNQUFNLENBQUMsNkJBQTZCLENBQUMsS0FBK0IsRUFBRSxTQUFvQixFQUMvRixvQkFBNEIsRUFBRSxpQkFBNEIsRUFBRSxZQUFxQjtRQUMvRSxNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDO1FBQ3ZDLFFBQVEsU0FBUyxDQUFDLElBQUksRUFBRTtZQUN0QixLQUFLLFNBQVM7Z0JBQ1osMEdBQTBHO2dCQUMxRyxxQkFBcUI7Z0JBQ3JCLElBQUksV0FBVyxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxFQUFFO29CQUMzQyxzR0FBc0c7b0JBQ3RHLHFHQUFxRztvQkFDckcsMkdBQTJHO29CQUMzRywrQ0FBK0M7b0JBQy9DLElBQUksU0FBUyxDQUFDLEtBQUssSUFBSSxXQUFXLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQzt3QkFDbEUsU0FBUyxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMseUJBQXlCLEVBQUU7d0JBQ2pELEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLDBDQUEwQyxDQUFDLFNBQVMsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7cUJBQzlGO3lCQUFNLElBQUksWUFBWSxJQUFJLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsRUFBRTt3QkFDckUsb0JBQW9CLElBQUksSUFBSSxTQUFTLENBQUMsRUFBRSxFQUFFLENBQUM7d0JBQzNDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHNDQUFzQyxDQUNwRCxTQUFTLENBQUMsRUFBRSxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7cUJBQ3pFO2lCQUNGO3FCQUFNLElBQUksU0FBUyxDQUFDLGNBQWMsRUFBRTtvQkFDbkMsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO29CQUMvRCxJQUFJLEtBQUssSUFBSSxXQUFXLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEVBQUU7d0JBQ2hELEtBQUssR0FBRyxTQUFTLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLG1CQUFtQixFQUFFLFFBQVEsRUFBRSxFQUFFOzRCQUN4RSxPQUFPLElBQUksQ0FBQyw2QkFBNkIsQ0FDdkMsbUJBQW1CLEVBQUUsUUFBUSxFQUFFLG9CQUFvQixFQUFFLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzt3QkFDaEcsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO3FCQUNYO2lCQUNGO2dCQUNELE1BQU07WUFDUiw4R0FBOEc7WUFDOUcsd0dBQXdHO1lBQ3hHLEtBQUssWUFBWTtnQkFDZixnR0FBZ0c7Z0JBQ2hHLElBQUksV0FBVyxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFO29CQUNqRSwyR0FBMkc7b0JBQzNHLHlHQUF5RztvQkFDekcsbUJBQW1CO29CQUNuQixNQUFNLFlBQVksR0FBRyxvQkFBb0IsSUFBSSxjQUFjLENBQUM7b0JBQzVELElBQUksU0FBUyxDQUFDLEtBQUssRUFBRTt3QkFDbkIsU0FBUyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFvQyxFQUFFLEtBQWEsRUFBRSxFQUFFOzRCQUM5RSwyRUFBMkU7NEJBQzNFLG9CQUFvQixHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzs0QkFDekUsS0FBSyxDQUFDLElBQUksQ0FDUixJQUFJLENBQUMsc0NBQXNDLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLG9CQUFvQixFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7d0JBQ3ZHLENBQUMsQ0FBQyxDQUFDO3FCQUNKO3lCQUFNLElBQUksWUFBWSxFQUFFO3dCQUN0QixZQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQW9DLEVBQUUsS0FBYSxFQUFFLEVBQUU7NEJBQ25GLG9CQUFvQixHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzs0QkFDekUsS0FBSyxDQUFDLElBQUksQ0FDUixJQUFJLENBQUMsc0NBQXNDLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLG9CQUFvQixFQUFFLGlCQUFpQixDQUFDLENBQUMsQ0FBQzt3QkFDL0csQ0FBQyxDQUFDLENBQUM7cUJBQ0o7aUJBQ0Y7cUJBQU0sSUFBSSxTQUFTLENBQUMscUJBQXFCLENBQUMsSUFBSSxLQUFLLFNBQVMsSUFBSSxTQUFTLENBQUMscUJBQXFCLENBQUMsY0FBYyxFQUFFO29CQUMvRyxJQUFJLFNBQVMsQ0FBQyxLQUFLLEVBQUU7d0JBQ25CLHdHQUF3Rzt3QkFDeEcsa0JBQWtCO3dCQUNsQiw2R0FBNkc7d0JBQzdHLDhDQUE4Qzt3QkFDOUMsTUFBTSxZQUFZLEdBQUcsb0JBQW9CLElBQUksY0FBYyxDQUFDO3dCQUM1RCxTQUFTLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQW9DLEVBQUUsS0FBYSxFQUFFLEVBQUU7NEJBQzlFLDJFQUEyRTs0QkFDM0Usb0JBQW9CLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDOzRCQUN6RSxLQUFLLEdBQUcsU0FBUyxDQUFDLHFCQUFxQixDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxtQkFBbUIsRUFBRSxRQUFRLEVBQUUsRUFBRTtnQ0FDOUYsT0FBTyxJQUFJLENBQUMsNkJBQTZCLENBQ3ZDLG1CQUFtQixFQUFFLFFBQVEsRUFBRSxvQkFBb0IsRUFBRSxpQkFBaUIsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDOzRCQUNyRyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7d0JBQ1osQ0FBQyxDQUFDLENBQUM7cUJBQ0o7aUJBQ0Y7Z0JBQ0QsTUFBTTtZQUNSLFFBQVE7WUFDTiwrQkFBK0I7U0FDbEM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRU8sTUFBTSxDQUFDLDBDQUEwQyxDQUFDLFNBQW9CLEVBQzVFLG9CQUE0QjtRQUMxQixPQUFPLElBQUksQ0FBQyxzQ0FBc0MsQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLFNBQVMsQ0FBQyxLQUFLLEVBQUUsb0JBQW9CLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDdkgsQ0FBQztJQUVPLE1BQU0sQ0FBQyxzQ0FBc0MsQ0FBQyxFQUFVLEVBQUUsS0FBYSxFQUM3RSxvQkFBNEIsRUFBRSxTQUFvQjtRQUNoRCxPQUFPO1lBQ0wsS0FBSyxFQUFFO2dCQUNMLGdCQUFnQixFQUFFLEVBQUU7Z0JBQ3BCLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSTtnQkFDNUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJO2dCQUM5QyxPQUFPLEVBQUUsS0FBSyxJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUM7b0JBQy9ELENBQUMsQ0FBRSxLQUFLLENBQUMsU0FBUyxDQUFXLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFO3dCQUN6QyxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFOzRCQUM1RCxxR0FBcUc7NEJBQ3JHLDRCQUE0Qjs0QkFDNUIsUUFBUSxDQUFDLEVBQUU7Z0NBQ1Qsd0NBQXdDO2dDQUN4QyxLQUFLLGtCQUFrQixDQUFDO2dDQUN4QixLQUFLLGlCQUFpQjtvQ0FDcEIsT0FBTyxFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUMsQ0FBQztnQ0FDbEYsaUNBQWlDO2dDQUNqQyxLQUFLLGlCQUFpQjtvQ0FDcEIsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFDLENBQUM7Z0NBQzVHO29DQUNFLE9BQU8sRUFBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUMsQ0FBQzs2QkFDaEQ7d0JBQ0gsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDTixDQUFDLENBQWlCO29CQUNsQixDQUFDLENBQUMsSUFBSTthQUNUO1lBQ0Qsb0JBQW9CO1lBQ3BCLFNBQVM7U0FDVixDQUFDO0lBQ04sQ0FBQztJQUVEOzs7Ozs7Ozs7O09BVUc7SUFDSSxNQUFNLENBQUMsMkJBQTJCLENBQUMsV0FBbUIsRUFBRSxTQUFvQixFQUFFLFlBQXFCO1FBQ3RHLE1BQU0sU0FBUyxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUM7UUFDdkMsUUFBUSxTQUFTLENBQUMsSUFBSSxFQUFFO1lBQ3RCLEtBQUssU0FBUztnQkFDWixJQUFJLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsRUFBRTtvQkFDM0Msc0dBQXNHO29CQUN0Ryw2R0FBNkc7b0JBQzdHLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQztvQkFDL0QsSUFBSSxLQUFLLElBQUksV0FBVyxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUU7d0JBQ2pFLFdBQVcsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FDaEMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQ3BGLFdBQVcsQ0FDWixDQUFDO3FCQUNIO2lCQUNGO3FCQUFNLElBQUksU0FBUyxDQUFDLGNBQWMsRUFBRTtvQkFDbkMsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO29CQUMvRCxJQUFJLEtBQUssSUFBSSxXQUFXLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEVBQUU7d0JBQ2hELFdBQVcsR0FBRyxTQUFTLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLDhCQUE4QixFQUFFLFFBQVEsRUFBRSxFQUFFOzRCQUN6RixPQUFPLElBQUksQ0FBQywyQkFBMkIsQ0FDckMsOEJBQThCLEVBQzlCLFFBQVEsRUFDUixLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUNuQixDQUFDO3dCQUNKLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQztxQkFDakI7aUJBQ0Y7Z0JBQ0QsTUFBTTtZQUNSLDhHQUE4RztZQUM5Ryx3R0FBd0c7WUFDeEcsS0FBSyxZQUFZO2dCQUNmLElBQUksV0FBVyxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFO29CQUNqRSwyR0FBMkc7b0JBQzNHLHlHQUF5RztvQkFDekcsbUJBQW1CO29CQUNuQixNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7b0JBQy9ELElBQUksS0FBSyxFQUFFO3dCQUNULEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFvQyxFQUFFLEVBQUU7NEJBQ3JELElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsRUFBRTtnQ0FDekIsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxDQUN4QyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFDcEYsV0FBVyxDQUNaLENBQUM7NkJBQ0g7d0JBQ0gsQ0FBQyxDQUFDLENBQUM7cUJBQ0o7aUJBQ0Y7cUJBQU0sSUFBSSxTQUFTLENBQUMscUJBQXFCLENBQUMsSUFBSSxLQUFLLFNBQVMsSUFBSSxTQUFTLENBQUMscUJBQXFCLENBQUMsY0FBYyxFQUFFO29CQUMvRyxJQUFJLFNBQVMsQ0FBQyxLQUFLLEVBQUU7d0JBQ25CLHdHQUF3Rzt3QkFDeEcsa0JBQWtCO3dCQUNsQiw2R0FBNkc7d0JBQzdHLDhDQUE4Qzt3QkFDOUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFvQyxFQUFFLEVBQUU7NEJBQy9ELFdBQVcsR0FBRyxTQUFTLENBQUMscUJBQXFCLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FDakUsQ0FBQyw4QkFBOEIsRUFBRSxRQUFRLEVBQUUsRUFBRTtnQ0FDM0MsT0FBTyxJQUFJLENBQUMsMkJBQTJCLENBQUMsOEJBQThCLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7NEJBQzdHLENBQUMsRUFDRCxXQUFXLENBQ1osQ0FBQzt3QkFDSixDQUFDLENBQUMsQ0FBQztxQkFDSjtpQkFDRjtnQkFDRCxNQUFNO1lBQ1IsUUFBUTtZQUNOLCtCQUErQjtTQUNsQztRQUNELE9BQU8sV0FBVyxDQUFDO0lBQ3ZCLENBQUM7SUFFTSxxQkFBcUIsQ0FBQyxZQUE4QixFQUFFLElBQVM7UUFDcEUsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNuRSxPQUFPLENBQUMsSUFBZ0IsRUFBVyxFQUFFO1lBQ25DLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN0RCxDQUFDLENBQUM7SUFDSixDQUFDO0lBRU0sb0JBQW9CLENBQUMsWUFBMEMsRUFBRSxJQUFlO1FBQ3JGLE9BQU8sSUFBSSxDQUFDLDRCQUE0QixDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNsRyxDQUFDO0lBRU0sY0FBYyxDQUFDLEdBQVE7UUFDNUIsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksU0FBUyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVNLDRCQUE0QixDQUFDLFVBQXVCLEVBQUUsVUFBa0I7UUFDN0UsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsV0FBVyxDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFDdEYsQ0FBQztJQUVNLGlDQUFpQyxDQUFDLFVBQXVCLEVBQUUsVUFBa0I7UUFDbEYsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsV0FBVyxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDcEYsQ0FBQztJQUVNLGVBQWUsQ0FDcEIsUUFBeUIsRUFDekIsV0FBdUMsRUFDdkMsV0FBdUMsRUFDdkMsU0FBeUM7UUFFekMsSUFBSSxRQUFRLFlBQVksU0FBUyxFQUFFLEVBQUUsd0JBQXdCO1lBQzNELFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUN2QjthQUFNLElBQUksUUFBUSxZQUFZLFNBQVMsRUFBRSxFQUFFLDJCQUEyQjtZQUNyRSxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDdkI7YUFBTSxJQUFJLFFBQVEsWUFBWSxXQUFXLEVBQUUsRUFBRSxjQUFjO1lBQzFELFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUNyQjtJQUNILENBQUM7SUFFTyxXQUFXLENBQUMsVUFBdUIsRUFBRSxVQUFrQixFQUFFLGFBQXlEO1FBQ3hILE1BQU0sTUFBTSxHQUFXLFdBQVcsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDM0QsVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN6QixhQUFhLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQzdCLElBQUksS0FBSyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLGNBQWMsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUNyRyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxjQUFjLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQzthQUN2RztRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQzs7QUFubUJ1QixxQ0FBeUIsR0FBRyxXQUFXLENBQUM7QUFDeEMsd0JBQVksR0FBaUIsSUFBSSxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDdkQsb0JBQVEsR0FBYSxJQUFJLFFBQVEsQ0FBQyxJQUFJLHVCQUF1QixFQUFFLENBQUMsQ0FBQztBQUN6Rix1RkFBdUY7QUFDaEUsd0JBQVksR0FBRyxVQUFVLENBQUM7QUFDakQsNkNBQTZDO0FBQ3RCLGlEQUFxQyxHQUFHLFlBQVksQ0FBQztBQUNyRCw4Q0FBa0MsR0FBRyxTQUFTLENBQUM7QUFDL0Msd0RBQTRDLEdBQW9CLENBQUMsYUFBYSxFQUFFLGtCQUFrQixDQUFDLENBQUM7QUErSW5HLGtDQUFzQixHQUFHLFNBQVMsYUFBYSxDQUFDLEtBQWdCLEVBQUUsTUFBYztJQUN0RyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEVBQUU7UUFDcEMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO0tBQ2hDO0FBQ0gsQ0FBQyxDQUFDO0FBRXNCLGdDQUFvQixHQUFHLFNBQVMsYUFBYSxDQUFDLEtBQWdCLEVBQUUsTUFBYztJQUNwRyxJQUFJLENBQUMsTUFBTSxFQUFFO1FBQ1gsTUFBTSxHQUFHLEVBQUUsQ0FBQTtLQUNaO0lBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUFFO1FBQ3BDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztLQUNoQztJQUVELDJDQUEyQztJQUMzQyxRQUFRLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFO1FBQzdCLEtBQUssV0FBVyxDQUFDO1FBQ2pCLEtBQUssZ0JBQWdCLENBQUMsQ0FBQztZQUNyQixNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFdBQVcsQ0FBQyw4QkFBOEIsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEcsTUFBTTtTQUNQO1FBQ0QsS0FBSyxpQkFBaUIsQ0FBQyxDQUFDO1lBQ3RCLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLFdBQVcsQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDakQsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQVMsRUFBRSxHQUFRLEVBQUUsRUFBRTtnQkFDekMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFdBQVcsQ0FBQyw4QkFBOEIsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDN0csQ0FBQyxDQUFDLENBQUM7WUFDSCxNQUFNO1NBQ1A7UUFDRCxLQUFLLE9BQU8sQ0FBQyxDQUFDO1lBQ1osTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQy9DLE1BQU07U0FDUDtRQUNELEtBQUssVUFBVSxDQUFDLENBQUM7WUFDZixNQUFNLFVBQVUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3JELE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsV0FBVyxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUN2RCxNQUFNO1NBQ1A7UUFDRCxLQUFLLE1BQU0sQ0FBQyxDQUFDO1lBQ1gsTUFBTSxVQUFVLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNyRCxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDbkQsTUFBTTtTQUNQO1FBQ0QsS0FBSyxTQUFTLENBQUMsQ0FBQztZQUNkLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLGNBQWMsRUFBRTtnQkFDdkQsS0FBSyxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBWSxFQUFFLEVBQUU7b0JBQ3ZELElBQUksQ0FBQyxZQUFZLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7d0JBQ2hGLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO3FCQUN2RDtnQkFDSCxDQUFDLENBQUMsQ0FBQzthQUNKO1lBQ0QsTUFBTTtTQUNQO1FBQ0QsS0FBSyxZQUFZLENBQUMsQ0FBQztZQUNqQixNQUFNLFFBQVEsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ25ELElBQUksUUFBUSxFQUFFO2dCQUNaLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRTtvQkFDN0IsUUFBUSxLQUFLLENBQUMsVUFBVSxDQUFDLHFCQUFxQixDQUFDLElBQUksRUFBRTt3QkFDbkQsS0FBSyxVQUFVLENBQUMsQ0FBQzs0QkFDZixJQUFJLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDOzRCQUNqRCxNQUFNO3lCQUNQO3dCQUNELEtBQUssTUFBTSxDQUFDLENBQUM7NEJBQ1gsSUFBSSxDQUFDLEtBQUssR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzs0QkFDN0MsTUFBTTt5QkFDUDt3QkFDRCxLQUFLLFNBQVMsQ0FBQyxDQUFDOzRCQUNkLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxxQkFBcUIsQ0FBQyxjQUFjLEVBQUU7Z0NBQ3pELEtBQUssQ0FBQyxVQUFVLENBQUMscUJBQXFCLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQVksRUFBRSxFQUFFO29DQUM3RSxJQUFJLENBQUMsWUFBWSxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO3dDQUNoRixXQUFXLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztxQ0FDakQ7Z0NBQ0gsQ0FBQyxDQUFDLENBQUM7NkJBQ0o7NEJBQ0QsTUFBTTt5QkFDUDtxQkFDRjtnQkFDSCxDQUFDLENBQUMsQ0FBQzthQUNKO1lBQ0QsTUFBTTtTQUNQO0tBQ0Y7QUFDSCxDQUFDLENBQUM7c0VBM09TLFdBQVc7bURBQVgsV0FBVyxXQUFYLFdBQVc7dUZBQVgsV0FBVztjQUR2QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ3VycmVuY3lQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUFycmF5LCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgcGxhaW5Ub0NsYXNzRnJvbUV4aXN0IH0gZnJvbSAnY2xhc3MtdHJhbnNmb3JtZXInO1xuaW1wb3J0IHsgV2l6YXJkUGFnZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvY2FzZS1lZGl0b3IvZG9tYWluJztcbmltcG9ydCB7IEFic3RyYWN0Rm9ybUZpZWxkQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9wYWxldHRlL2Jhc2UtZmllbGQvYWJzdHJhY3QtZm9ybS1maWVsZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRmxhZ0RldGFpbCwgRmxhZ3NXaXRoRm9ybUdyb3VwUGF0aCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvcGFsZXR0ZS9jYXNlLWZsYWcvZG9tYWluL2Nhc2UtZmxhZy5tb2RlbCc7XG5pbXBvcnQgeyBDYXNlRmxhZ1N0YXR1cyB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvcGFsZXR0ZS9jYXNlLWZsYWcvZW51bXMvY2FzZS1mbGFnLXN0YXR1cy5lbnVtJztcbmltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9wYWxldHRlL3V0aWxzJztcbmltcG9ydCB7IENhc2VFdmVudFRyaWdnZXIsIENhc2VGaWVsZCwgQ2FzZVRhYiwgQ2FzZVZpZXcsIEZpZWxkVHlwZSwgRmllbGRUeXBlRW51bSwgRml4ZWRMaXN0SXRlbSwgUHJlZGljYXRlIH0gZnJvbSAnLi4vLi4vZG9tYWluJztcbmltcG9ydCB7IEZvcm1hdFRyYW5zbGF0b3JTZXJ2aWNlIH0gZnJvbSAnLi4vY2FzZS1maWVsZHMvZm9ybWF0LXRyYW5zbGF0b3Iuc2VydmljZSc7XG5cbi8vIEBkeW5hbWljXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRmllbGRzVXRpbHMge1xuXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IGNhc2VMZXZlbENhc2VGbGFnc0ZpZWxkSWQgPSAnY2FzZUZsYWdzJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgY3VycmVuY3lQaXBlOiBDdXJyZW5jeVBpcGUgPSBuZXcgQ3VycmVuY3lQaXBlKCdlbi1HQicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBkYXRlUGlwZTogRGF0ZVBpcGUgPSBuZXcgRGF0ZVBpcGUobmV3IEZvcm1hdFRyYW5zbGF0b3JTZXJ2aWNlKCkpO1xuICAvLyBFVUktNDI0NC4gMyBkYXNoZXMgaW5zdGVhZCBvZiAxIHRvIG1ha2UgdGhpcyBsZXNzIGxpa2VseSB0byBjbGFzaCB3aXRoIGEgcmVhbCBmaWVsZC5cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBMQUJFTF9TVUZGSVggPSAnLS0tTEFCRUwnO1xuICAvLyBIYW5kbGluZyBvZiBEeW5hbWljIExpc3RzIGluIENvbXBsZXggVHlwZXNcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBTRVJWRVJfUkVTUE9OU0VfRklFTERfVFlQRV9DT0xMRUNUSU9OID0gJ0NvbGxlY3Rpb24nO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNFUlZFUl9SRVNQT05TRV9GSUVMRF9UWVBFX0NPTVBMRVggPSAnQ29tcGxleCc7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU0VSVkVSX1JFU1BPTlNFX0ZJRUxEX1RZUEVfRFlOQU1JQ19MSVNUX1RZUEU6IEZpZWxkVHlwZUVudW1bXSA9IFsnRHluYW1pY0xpc3QnLCAnRHluYW1pY1JhZGlvTGlzdCddO1xuXG4gIHB1YmxpYyBzdGF0aWMgY29udmVydFRvQ2FzZUZpZWxkKG9iajogYW55KTogQ2FzZUZpZWxkIHtcbiAgICBpZiAoIShvYmogaW5zdGFuY2VvZiBDYXNlRmllbGQpKSB7XG4gICAgICByZXR1cm4gcGxhaW5Ub0NsYXNzRnJvbUV4aXN0KG5ldyBDYXNlRmllbGQoKSwgb2JqKTtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgdG9WYWx1ZXNNYXAoY2FzZUZpZWxkczogQ2FzZUZpZWxkW10pOiBhbnkge1xuICAgIGNvbnN0IHZhbHVlTWFwID0ge307XG4gICAgY2FzZUZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgIHZhbHVlTWFwW2ZpZWxkLmlkXSA9IEZpZWxkc1V0aWxzLnByZXBhcmVWYWx1ZShmaWVsZCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHZhbHVlTWFwO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBnZXRUeXBlKGVsZW06IGFueSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlbGVtKS5zbGljZSg4LCAtMSk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGlzT2JqZWN0KGVsZW06IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgZWxlbSA9PT0gJ29iamVjdCcgJiYgZWxlbSAhPT0gbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgaXNOb25FbXB0eU9iamVjdChlbGVtOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc09iamVjdChlbGVtKSAmJiBPYmplY3Qua2V5cyhlbGVtKS5sZW5ndGggIT09IDA7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGlzQXJyYXkoZWxlbTogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoZWxlbSk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGFyZUNvbGxlY3Rpb25WYWx1ZXNTaW1wbGVGaWVsZHMoZmllbGRWYWx1ZTogYW55W10pOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuaXNPYmplY3QoZmllbGRWYWx1ZVswXVsndmFsdWUnXSkgJiYgIUFycmF5LmlzQXJyYXkoZmllbGRWYWx1ZVswXVsndmFsdWUnXSkgJiYgZmllbGRWYWx1ZVswXVsndmFsdWUnXSAhPT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBpc0NvbGxlY3Rpb25PZlNpbXBsZVR5cGVzKGZpZWxkVmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzQ29sbGVjdGlvbihmaWVsZFZhbHVlKSAmJiB0aGlzLmFyZUNvbGxlY3Rpb25WYWx1ZXNTaW1wbGVGaWVsZHMoZmllbGRWYWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGlzTXVsdGlTZWxlY3RWYWx1ZShmb3JtOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc05vbkVtcHR5QXJyYXkoZm9ybSkgJiYgIXRoaXMuaXNDb2xsZWN0aW9uV2l0aFZhbHVlKGZvcm0pO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBpc05vbkVtcHR5QXJyYXkocGFnZUZvcm1GaWVsZHM6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHBhZ2VGb3JtRmllbGRzKSAmJiBwYWdlRm9ybUZpZWxkc1swXSAhPT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBpc0NvbGxlY3Rpb24ocGFnZUZvcm1GaWVsZHM6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzTm9uRW1wdHlBcnJheShwYWdlRm9ybUZpZWxkcykgJiYgdGhpcy5pc0NvbGxlY3Rpb25XaXRoVmFsdWUocGFnZUZvcm1GaWVsZHMpO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBpc0NvbGxlY3Rpb25XaXRoVmFsdWUocGFnZUZvcm1GaWVsZHM6IGFueVtdKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHBhZ2VGb3JtRmllbGRzWzBdWyd2YWx1ZSddICE9PSB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGlzTGlua2VkQ2FzZXNDYXNlRmllbGQoY2FzZUZpZWxkOiBDYXNlRmllbGQpOiBib29sZWFuIHtcbiAgICBpZiAoIWNhc2VGaWVsZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gY2FzZUZpZWxkLmZpZWxkX3R5cGUuY29sbGVjdGlvbl9maWVsZF90eXBlLmlkID09PSAnQ2FzZUxpbmsnO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBjbG9uZU9iamVjdChvYmo6IGFueSk6IGFueSB7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIG9iaik7XG4gIH1cblxuICAvLyB0ZW1wb3JhcnkgZnVuY3Rpb24gdW50aWwgdGhpcyBjYW4gYmUgbW92ZWQgdG8gQ2FzZVZpZXcgY2xhc3MgKFJETS0yNjgxKVxuICBwdWJsaWMgc3RhdGljIGdldENhc2VGaWVsZHMoY2FzZVZpZXc6IENhc2VWaWV3KTogQ2FzZUZpZWxkW10ge1xuICAgIGNvbnN0IGNhc2VEYXRhRmllbGRzOiBDYXNlRmllbGRbXSA9IGNhc2VWaWV3LnRhYnMucmVkdWNlKChhY2M6IENhc2VGaWVsZFtdLCB0YWI6IENhc2VUYWIpID0+IHtcbiAgICAgIHJldHVybiBhY2MuY29uY2F0KHRhYi5maWVsZHMpO1xuICAgIH0sIFtdKTtcblxuICAgIGNvbnN0IG1ldGFkYXRhRmllbGRzOiBDYXNlRmllbGRbXSA9IGNhc2VWaWV3Lm1ldGFkYXRhRmllbGRzO1xuICAgIHJldHVybiBtZXRhZGF0YUZpZWxkcy5jb25jYXQoY2FzZURhdGFGaWVsZHMuZmlsdGVyKChjYXNlRmllbGQ6IENhc2VGaWVsZCkgPT4ge1xuICAgICAgcmV0dXJuIG1ldGFkYXRhRmllbGRzLmZpbmRJbmRleChtZXRhZGF0YUZpZWxkID0+IG1ldGFkYXRhRmllbGQuaWQgPT09IGNhc2VGaWVsZC5pZCkgPCAwO1xuICAgIH0pKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgYWRkQ2FzZUZpZWxkQW5kQ29tcG9uZW50UmVmZXJlbmNlcyAoYzogQWJzdHJhY3RDb250cm9sLCBjZjogQ2FzZUZpZWxkLCBjb21wOiBBYnN0cmFjdEZvcm1GaWVsZENvbXBvbmVudCk6IHZvaWQge1xuICAgIGNbJ2Nhc2VGaWVsZCddID0gY2Y7XG4gICAgY1snY29tcG9uZW50J10gPSBjb21wO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY3Vyc2l2ZSBjaGVjayBvZiBhbiBhcnJheSBvciBvYmplY3QgYW5kIGl0cyBkZXNjZW5kYW50cyBmb3IgdGhlIHByZXNlbmNlIG9mIGFueSBub24tZW1wdHkgdmFsdWVzLlxuICAgKlxuICAgKiBAcGFyYW0gb2JqZWN0IFRoZSBhcnJheSBvciBvYmplY3QgdG8gY2hlY2tcbiAgICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBhcnJheSBvciBvYmplY3QgKG9yIGEgZGVzY2VuZGFudCkgY29udGFpbnMgYXQgbGVhc3Qgb25lIG5vbi1lbXB0eSB2YWx1ZTsgYGZhbHNlYCBvdGhlcndpc2VcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY29udGFpbnNOb25FbXB0eVZhbHVlcyhvYmplY3Q6IG9iamVjdCk6IGJvb2xlYW4ge1xuICAgIGlmICghb2JqZWN0KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IHZhbHVlcyA9IE9iamVjdC5rZXlzKG9iamVjdCkubWFwKGtleSA9PiBvYmplY3Rba2V5XSk7XG4gICAgY29uc3Qgb2JqZWN0UmVmcyA9IFtdO1xuICAgIC8vIEFsc28gdGVzdCBmb3IgbnVtZXJpYyB2YWx1ZXMsIGFuZCBsZW5ndGggPiAwIGZvciBub24tbnVtZXJpYyB2YWx1ZXMgYmVjYXVzZSB0aGlzIGNvdmVycyBib3RoIHN0cmluZ3MgYW5kIGFycmF5cy5cbiAgICAvLyBOb3RlOiBEZWxpYmVyYXRlIHVzZSBvZiBub24tZXF1YWxpdHkgKCE9KSBvcGVyYXRvciBmb3IgbnVsbCBjaGVjaywgdG8gaGFuZGxlIGJvdGggbnVsbCBhbmQgdW5kZWZpbmVkIHZhbHVlcy5cbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IHRyaXBsZS1lcXVhbHNcbiAgICBjb25zdCBoYXNOb25OdWxsUHJpbWl0aXZlID0gdmFsdWVzLnNvbWUoeCA9PiAoeCAhPSBudWxsICYmXG4gICAgICAoKHR5cGVvZiB4ID09PSAnb2JqZWN0JyAmJiB4LmNvbnN0cnVjdG9yID09PSBPYmplY3QpIHx8IEFycmF5LmlzQXJyYXkoeClcbiAgICAgICAgPyAhb2JqZWN0UmVmcy5wdXNoKHgpXG4gICAgICAgIDogdHlwZW9mIHggPT09ICdudW1iZXInIHx8IHgubGVuZ3RoID4gMClcbiAgICApKTtcbiAgICByZXR1cm4gIWhhc05vbk51bGxQcmltaXRpdmUgPyBvYmplY3RSZWZzLnNvbWUoeSA9PiB0aGlzLmNvbnRhaW5zTm9uRW1wdHlWYWx1ZXMoeSkpIDogaGFzTm9uTnVsbFByaW1pdGl2ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBoYW5kbGVOZXN0ZWREeW5hbWljTGlzdHMoKVxuICAgKiBSZWFzc2lnbnMgbGlzdF9pdGVtIGFuZCB2YWx1ZSBkYXRhIHRvIER5bmFtaWNMaXN0IGNoaWxkcmVuXG4gICAqIGRvd24gdGhlIHRyZWUuIFNlcnZlciByZXNwb25zZSByZXR1cm5zIGRhdGEgb25seSBpblxuICAgKiB0aGUgYHZhbHVlYCBvYmplY3Qgb2YgcGFyZW50IGNvbXBsZXggdHlwZVxuICAgKlxuICAgKiBFVUktMjUzMCBEeW5hbWljIExpc3RzIGZvciBFbGVtZW50cyBpbiBhIENvbXBsZXggVHlwZVxuICAgKlxuICAgKiBAcGFyYW0ganNvbkJvZHkgLSB7IGNhc2VfZmllbGRzOiBbIENhc2VGaWVsZCwgQ2FzZUZpZWxkIF0gfVxuICAgKi9cbiAgIHB1YmxpYyBzdGF0aWMgaGFuZGxlTmVzdGVkRHluYW1pY0xpc3RzKGpzb25Cb2R5OiB7IGNhc2VfZmllbGRzOiBDYXNlRmllbGRbXSB9KTogYW55IHtcblxuICAgIGlmIChqc29uQm9keS5jYXNlX2ZpZWxkcykge1xuICAgICAganNvbkJvZHkuY2FzZV9maWVsZHMuZm9yRWFjaChjYXNlRmllbGQgPT4ge1xuICAgICAgICBpZiAoY2FzZUZpZWxkLmZpZWxkX3R5cGUpIHtcbiAgICAgICAgICB0aGlzLnNldER5bmFtaWNMaXN0RGVmaW5pdGlvbihjYXNlRmllbGQsIGNhc2VGaWVsZC5maWVsZF90eXBlLCBjYXNlRmllbGQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4ganNvbkJvZHk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBwcmVwYXJlVmFsdWUoZmllbGQ6IENhc2VGaWVsZCk6IGFueSB7XG4gICAgaWYgKGZpZWxkLnZhbHVlKSB7XG4gICAgICByZXR1cm4gZmllbGQudmFsdWU7XG4gICAgfSBlbHNlIGlmIChmaWVsZC5pc0NvbXBsZXgoKSkge1xuICAgICAgY29uc3QgdmFsdWVNYXAgPSB7fTtcbiAgICAgIGZpZWxkLmZpZWxkX3R5cGUuY29tcGxleF9maWVsZHMuZm9yRWFjaChjb21wbGV4RmllbGQgPT4ge1xuICAgICAgICB2YWx1ZU1hcFtjb21wbGV4RmllbGQuaWRdID0gRmllbGRzVXRpbHMucHJlcGFyZVZhbHVlKGNvbXBsZXhGaWVsZCk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB2YWx1ZU1hcDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBERUZBVUxUX01FUkdFX0ZVTkNUSU9OID0gZnVuY3Rpb24gbWVyZ2VGdW5jdGlvbihmaWVsZDogQ2FzZUZpZWxkLCByZXN1bHQ6IG9iamVjdCk6IHZvaWQge1xuICAgIGlmICghcmVzdWx0Lmhhc093blByb3BlcnR5KGZpZWxkLmlkKSkge1xuICAgICAgcmVzdWx0W2ZpZWxkLmlkXSA9IGZpZWxkLnZhbHVlO1xuICAgIH1cbiAgfTtcblxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBMQUJFTF9NRVJHRV9GVU5DVElPTiA9IGZ1bmN0aW9uIG1lcmdlRnVuY3Rpb24oZmllbGQ6IENhc2VGaWVsZCwgcmVzdWx0OiBvYmplY3QpOiB2b2lkIHtcbiAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgcmVzdWx0ID0ge31cbiAgICB9XG4gICAgaWYgKCFyZXN1bHQuaGFzT3duUHJvcGVydHkoZmllbGQuaWQpKSB7XG4gICAgICByZXN1bHRbZmllbGQuaWRdID0gZmllbGQudmFsdWU7XG4gICAgfVxuXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBzd2l0Y2gtZGVmYXVsdFxuICAgIHN3aXRjaCAoZmllbGQuZmllbGRfdHlwZS50eXBlKSB7XG4gICAgICBjYXNlICdGaXhlZExpc3QnOlxuICAgICAgY2FzZSAnRml4ZWRSYWRpb0xpc3QnOiB7XG4gICAgICAgIHJlc3VsdFtmaWVsZC5pZF0gPSBGaWVsZHNVdGlscy5nZXRGaXhlZExpc3RMYWJlbEJ5Q29kZU9yRW1wdHkoZmllbGQsIHJlc3VsdFtmaWVsZC5pZF0gfHwgZmllbGQudmFsdWUpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ011bHRpU2VsZWN0TGlzdCc6IHtcbiAgICAgICAgY29uc3QgZmllbGRWYWx1ZSA9IHJlc3VsdFtmaWVsZC5pZF0gfHwgW107XG4gICAgICAgIHJlc3VsdFtmaWVsZC5pZCArIEZpZWxkc1V0aWxzLkxBQkVMX1NVRkZJWF0gPSBbXTtcbiAgICAgICAgZmllbGRWYWx1ZS5mb3JFYWNoKChjb2RlOiBhbnksIGlkeDogYW55KSA9PiB7XG4gICAgICAgICAgcmVzdWx0W2ZpZWxkLmlkICsgRmllbGRzVXRpbHMuTEFCRUxfU1VGRklYXVtpZHhdID0gRmllbGRzVXRpbHMuZ2V0Rml4ZWRMaXN0TGFiZWxCeUNvZGVPckVtcHR5KGZpZWxkLCBjb2RlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnTGFiZWwnOiB7XG4gICAgICAgIHJlc3VsdFtmaWVsZC5pZF0gPSBGaWVsZHNVdGlscy5nZXRMYWJlbChmaWVsZCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnTW9uZXlHQlAnOiB7XG4gICAgICAgIGNvbnN0IGZpZWxkVmFsdWUgPSAocmVzdWx0W2ZpZWxkLmlkXSB8fCBmaWVsZC52YWx1ZSk7XG4gICAgICAgIHJlc3VsdFtmaWVsZC5pZF0gPSBGaWVsZHNVdGlscy5nZXRNb25leUdCUChmaWVsZFZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdEYXRlJzoge1xuICAgICAgICBjb25zdCBmaWVsZFZhbHVlID0gKHJlc3VsdFtmaWVsZC5pZF0gfHwgZmllbGQudmFsdWUpO1xuICAgICAgICByZXN1bHRbZmllbGQuaWRdID0gRmllbGRzVXRpbHMuZ2V0RGF0ZShmaWVsZFZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdDb21wbGV4Jzoge1xuICAgICAgICBpZiAocmVzdWx0W2ZpZWxkLmlkXSAmJiBmaWVsZC5maWVsZF90eXBlLmNvbXBsZXhfZmllbGRzKSB7XG4gICAgICAgICAgZmllbGQuZmllbGRfdHlwZS5jb21wbGV4X2ZpZWxkcy5mb3JFYWNoKChmOiBDYXNlRmllbGQpID0+IHtcbiAgICAgICAgICAgIGlmIChbJ0NvbGxlY3Rpb24nLCAnQ29tcGxleCcsICdNdWx0aVNlbGVjdExpc3QnXS5pbmRleE9mKGYuZmllbGRfdHlwZS50eXBlKSA+IC0xKSB7XG4gICAgICAgICAgICAgIEZpZWxkc1V0aWxzLkxBQkVMX01FUkdFX0ZVTkNUSU9OKGYsIHJlc3VsdFtmaWVsZC5pZF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnQ29sbGVjdGlvbic6IHtcbiAgICAgICAgY29uc3QgZWxlbWVudHMgPSAocmVzdWx0W2ZpZWxkLmlkXSB8fCBmaWVsZC52YWx1ZSk7XG4gICAgICAgIGlmIChlbGVtZW50cykge1xuICAgICAgICAgIGVsZW1lbnRzLmZvckVhY2goKGVsZW06IGFueSkgPT4ge1xuICAgICAgICAgICAgc3dpdGNoIChmaWVsZC5maWVsZF90eXBlLmNvbGxlY3Rpb25fZmllbGRfdHlwZS50eXBlKSB7XG4gICAgICAgICAgICAgIGNhc2UgJ01vbmV5R0JQJzoge1xuICAgICAgICAgICAgICAgIGVsZW0udmFsdWUgPSBGaWVsZHNVdGlscy5nZXRNb25leUdCUChlbGVtLnZhbHVlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlICdEYXRlJzoge1xuICAgICAgICAgICAgICAgIGVsZW0udmFsdWUgPSBGaWVsZHNVdGlscy5nZXREYXRlKGVsZW0udmFsdWUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgJ0NvbXBsZXgnOiB7XG4gICAgICAgICAgICAgICAgaWYgKGZpZWxkLmZpZWxkX3R5cGUuY29sbGVjdGlvbl9maWVsZF90eXBlLmNvbXBsZXhfZmllbGRzKSB7XG4gICAgICAgICAgICAgICAgICBmaWVsZC5maWVsZF90eXBlLmNvbGxlY3Rpb25fZmllbGRfdHlwZS5jb21wbGV4X2ZpZWxkcy5mb3JFYWNoKChmOiBDYXNlRmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFsnQ29sbGVjdGlvbicsICdDb21wbGV4JywgJ011bHRpU2VsZWN0TGlzdCddLmluZGV4T2YoZi5maWVsZF90eXBlLnR5cGUpID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICBGaWVsZHNVdGlscy5MQUJFTF9NRVJHRV9GVU5DVElPTihmLCBlbGVtLnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBGb3JtYXRzIGEgYE1vbmV5R0JQYCB2YWx1ZSB0byBpbmNsdWRlIGN1cnJlbmN5IHVuaXRzLlxuICAgKiBAcGFyYW0gZmllbGRWYWx1ZSBUaGUgQ3VycmVuY3lQaXBlIGV4cGVjdHMgYW4gYGFueWAgcGFyYW1ldGVyIHNvIHRoaXMgbXVzdCBhbHNvIGJlIGBhbnlgLFxuICAgKiBidXQgaXQgc2hvdWxkIGJlIFwibnVtYmVyLWxpa2VcIiAoZS5nLiwgJzEyMzQnKVxuICAgKiBAcmV0dXJucyBBIGZvcm1hdHRlZCBzdHJpbmcgKGUuZy4sIMKjMTIuMzQpXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBnZXRNb25leUdCUChmaWVsZFZhbHVlOiBhbnkpOiBzdHJpbmcge1xuICAgIHJldHVybiBmaWVsZFZhbHVlID8gRmllbGRzVXRpbHMuY3VycmVuY3lQaXBlLnRyYW5zZm9ybShmaWVsZFZhbHVlIC8gMTAwLCAnR0JQJywgJ3N5bWJvbCcpIDogZmllbGRWYWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGdldExhYmVsKGZpZWxkVmFsdWU6IENhc2VGaWVsZCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGZpZWxkVmFsdWUgPyBmaWVsZFZhbHVlLmxhYmVsIDogJyc7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBnZXREYXRlKGZpZWxkVmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEZvcm1hdCBzcGVjaWZpZWQgaGVyZSB3YXNuJ3QgcHJldmlvdXNseSB3b3JraW5nIGFuZCBsb3RzIG9mIHRlc3RzIGRlcGVuZCBvbiBpdCBub3Qgd29ya2luZ1xuICAgICAgLy8gTm93IHRoYXQgZm9ybWF0cyB3b3JrIGNvcnJlY3RseSBtYW55IHRlc3Qgd291bGQgYnJlYWsgLSBhbmQgdGhpcyBjb3VsZCBhZmZlY3Qgc2VydmljZXMgd2hpY2ggbWF5IGRlcGVuZCBvblxuICAgICAgLy8gdGhlIG9yZ2luYWwgYmVoYXZpb3VyIG9mIHJldHVybmluZyBkYXRlcyBpbiBcImQgTU1NIHl5eXlcIlxuICAgICAgLy8gTm90ZSAtIHJlcGxhY2VkICdkJyB3aXRoICdEJyBhcyBkYXRlcGlwZSB1c2luZyBtb21lbnQgdG8gYXZvaWQgdGltZXpvbmUgZGlzY3JlcGFuY2llc1xuICAgICAgcmV0dXJuIEZpZWxkc1V0aWxzLmRhdGVQaXBlLnRyYW5zZm9ybShmaWVsZFZhbHVlLCBudWxsLCAnRCBNTU0geXl5eScpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiB0aGlzLnRleHRGb3JJbnZhbGlkRmllbGQoJ0RhdGUnLCBmaWVsZFZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBnZXRGaXhlZExpc3RMYWJlbEJ5Q29kZU9yRW1wdHkoZmllbGQ6IENhc2VGaWVsZCwgY29kZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCByZWxldmFudEl0ZW06IEZpeGVkTGlzdEl0ZW0gPSBjb2RlID8gZmllbGQuZmllbGRfdHlwZS5maXhlZF9saXN0X2l0ZW1zLmZpbmQoaXRlbSA9PiBpdGVtLmNvZGUgPT09IGNvZGUpIDogbnVsbDtcbiAgICByZXR1cm4gcmVsZXZhbnRJdGVtID8gcmVsZXZhbnRJdGVtLmxhYmVsIDogJyc7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyB0ZXh0Rm9ySW52YWxpZEZpZWxkKHR5cGU6IHN0cmluZywgaW52YWxpZFZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBgeyBJbnZhbGlkICR7dHlwZX06ICR7aW52YWxpZFZhbHVlfSB9YDtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHNldER5bmFtaWNMaXN0RGVmaW5pdGlvbihjYXNlRmllbGQ6IENhc2VGaWVsZCwgY2FzZUZpZWxkVHlwZTogRmllbGRUeXBlLCByb290Q2FzZUZpZWxkOiBDYXNlRmllbGQpIHtcbiAgICBpZiAoY2FzZUZpZWxkVHlwZS50eXBlID09PSBGaWVsZHNVdGlscy5TRVJWRVJfUkVTUE9OU0VfRklFTERfVFlQRV9DT01QTEVYKSB7XG5cbiAgICAgIGNhc2VGaWVsZFR5cGUuY29tcGxleF9maWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgaXNEeW5hbWljRmllbGQgPSBGaWVsZHNVdGlscy5TRVJWRVJfUkVTUE9OU0VfRklFTERfVFlQRV9EWU5BTUlDX0xJU1RfVFlQRS5pbmRleE9mKGZpZWxkLmZpZWxkX3R5cGUudHlwZSkgIT09IC0xO1xuXG4gICAgICAgICAgaWYgKGlzRHluYW1pY0ZpZWxkKSB7XG4gICAgICAgICAgICBjb25zdCBkeW5hbWljTGlzdFZhbHVlID0gdGhpcy5nZXREeW5hbWljTGlzdFZhbHVlKHJvb3RDYXNlRmllbGQudmFsdWUsIGZpZWxkLmlkKTtcbiAgICAgICAgICAgIGlmIChkeW5hbWljTGlzdFZhbHVlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGxpc3RfaXRlbXMgPSBkeW5hbWljTGlzdFZhbHVlWzBdLmxpc3RfaXRlbXM7XG4gICAgICAgICAgICAgIGNvbnN0IGNvbXBsZXhWYWx1ZSA9IGR5bmFtaWNMaXN0VmFsdWUubWFwKGRhdGEgPT4gZGF0YS52YWx1ZSk7XG4gICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0ge1xuICAgICAgICAgICAgICAgIGxpc3RfaXRlbXMsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGNvbXBsZXhWYWx1ZS5sZW5ndGggPiAwID8gY29tcGxleFZhbHVlIDogdW5kZWZpbmVkXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIGZpZWxkLnZhbHVlID0ge1xuICAgICAgICAgICAgICAgIC4uLnZhbHVlXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIGZpZWxkLmZvcm1hdHRlZF92YWx1ZSA9IHtcbiAgICAgICAgICAgICAgICAuLi5maWVsZC5mb3JtYXR0ZWRfdmFsdWUsXG4gICAgICAgICAgICAgICAgLi4udmFsdWVcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZXREeW5hbWljTGlzdERlZmluaXRpb24oZmllbGQsIGZpZWxkLmZpZWxkX3R5cGUsIHJvb3RDYXNlRmllbGQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoY2FzZUZpZWxkVHlwZS50eXBlID09PSBGaWVsZHNVdGlscy5TRVJWRVJfUkVTUE9OU0VfRklFTERfVFlQRV9DT0xMRUNUSU9OKSB7XG4gICAgICBpZiAoY2FzZUZpZWxkVHlwZS5jb2xsZWN0aW9uX2ZpZWxkX3R5cGUpIHtcbiAgICAgICAgdGhpcy5zZXREeW5hbWljTGlzdERlZmluaXRpb24oY2FzZUZpZWxkLCBjYXNlRmllbGRUeXBlLmNvbGxlY3Rpb25fZmllbGRfdHlwZSwgcm9vdENhc2VGaWVsZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0RHluYW1pY0xpc3RWYWx1ZShqc29uQmxvY2s6IGFueSwga2V5OiBzdHJpbmcpIHtcblxuICAgIGNvbnN0IGRhdGEgPSBqc29uQmxvY2sgPyB0aGlzLmdldE5lc3RlZEZpZWxkVmFsdWVzKGpzb25CbG9jaywga2V5LCBbXSkgOiBbXTtcblxuICAgIHJldHVybiBkYXRhLmxlbmd0aCA+IDAgPyBkYXRhIDogbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGdldE5lc3RlZEZpZWxkVmFsdWVzKGpzb25EYXRhOiBhbnksIGtleTogc3RyaW5nLCBvdXRwdXQ6IGFueVtdID0gW10pIHtcbiAgICBpZiAoanNvbkRhdGEgJiYganNvbkRhdGFba2V5XSkge1xuICAgICAgb3V0cHV0LnB1c2goanNvbkRhdGFba2V5XSk7XG4gICAgfSBlbHNlICB7XG4gICAgICBmb3IgKGNvbnN0IGVsZW1lbnRLZXkgaW4ganNvbkRhdGEpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBqc29uRGF0YSA9PT0gJ29iamVjdCcgJiYganNvbkRhdGEuaGFzT3duUHJvcGVydHkoZWxlbWVudEtleSkpIHtcbiAgICAgICAgICB0aGlzLmdldE5lc3RlZEZpZWxkVmFsdWVzKGpzb25EYXRhW2VsZW1lbnRLZXldLCBrZXksIG91dHB1dCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG91dHB1dDtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgaXNGbGFnc0Nhc2VGaWVsZChjYXNlRmllbGQ6IENhc2VGaWVsZCk6IGJvb2xlYW4ge1xuICAgIGlmICghY2FzZUZpZWxkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuaXNGbGFnc0ZpZWxkVHlwZShjYXNlRmllbGQuZmllbGRfdHlwZSk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGlzRmxhZ0xhdW5jaGVyQ2FzZUZpZWxkKGNhc2VGaWVsZDogQ2FzZUZpZWxkKTogYm9vbGVhbiB7XG4gICAgaWYgKCFjYXNlRmllbGQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2FzZUZpZWxkLmZpZWxkX3R5cGUudHlwZSA9PT0gJ0ZsYWdMYXVuY2hlcic7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGlzRmxhZ3NGaWVsZFR5cGUoZmllbGRUeXBlOiBGaWVsZFR5cGUpOiBib29sZWFuIHtcbiAgICBpZiAoIWZpZWxkVHlwZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIE5vdGU6IFRoaXMgaW1wbGVtZW50YXRpb24gc3VwcG9ydHMgdGhlIGR1bW15IGZpZWxkIHR5cGUgSUQgb2YgXCJDYXNlRmxhZ1wiIGZvciB0ZXN0aW5nIGFuZCB0aGUgcmVhbCBmaWVsZCB0eXBlXG4gICAgLy8gSUQgb2YgXCJGbGFnc1wiXG4gICAgcmV0dXJuIChmaWVsZFR5cGUudHlwZSA9PT0gJ0NvbXBsZXgnICYmIChmaWVsZFR5cGUuaWQgPT09ICdDYXNlRmxhZycgfHwgZmllbGRUeXBlLmlkID09PSAnRmxhZ3MnKSk7XG4gIH1cblxuICAvKipcbiAgICogRXh0cmFjdCBmbGFncyBkYXRhIGZyb20gYSBgQ2FzZUZpZWxkYCBpbnN0YW5jZSwgcmVjdXJzaW5nIGFuZCBpdGVyYXRpbmcgdGhyb3VnaCBzdWItZmllbGRzIG9mIGEgQ29tcGxleCBmaWVsZCBvclxuICAgKiBlYWNoIGZpZWxkIGluIGEgQ29sbGVjdGlvbiBmaWVsZC5cbiAgICpcbiAgICogQHBhcmFtIGZsYWdzIEFuIGFycmF5IGZvciBhY2N1bXVsYXRpbmcgZXh0cmFjdGVkIGZsYWdzIGRhdGEgYW5kIGRlcml2ZWQgYEZvcm1Hcm91cGAgcGF0aHNcbiAgICogQHBhcmFtIGNhc2VGaWVsZCBBIGBDYXNlRmllbGRgIGluc3RhbmNlIGZyb20gd2hpY2ggdG8gZXh0cmFjdCB0aGUgZmxhZ3MgZGF0YVxuICAgKiBAcGFyYW0gcGF0aFRvRmxhZ3NGb3JtR3JvdXAgQSAoZG90LWRlbGltaXRlZCkgc3RyaW5nIGZvciBjb25jYXRlbmF0aW5nIHRoZSBuYW1lIG9mIGVhY2ggY29udHJvbCB0aGF0IGZvcm1zIHRoZSBwYXRoXG4gICAqIHRvIHRoZSBgRm9ybUdyb3VwYCBmb3IgdGhlIGBGbGFnc2AgaW5zdGFuY2VcbiAgICogQHBhcmFtIHRvcExldmVsQ2FzZUZpZWxkIFRoZSB0b3AtbGV2ZWwgYENhc2VGaWVsZGAgdGhhdCBjb250YWlucyB0aGUgdmFsdWUgcHJvcGVydHkuIFRoaXMgaXMgcmVxdWlyZWQgYmVjYXVzZSBfb25seVxuICAgKiB0b3AtbGV2ZWxfIGBDYXNlRmllbGRgcyBjb250YWluIGFjdHVhbCB2YWx1ZXMgYW5kIGEgcmVmZXJlbmNlIG5lZWRzIHRvIGJlIG1haW50YWluZWQgdG8gc3VjaCBhIGZpZWxkXG4gICAqIEBwYXJhbSBjdXJyZW50VmFsdWUgVGhlIGN1cnJlbnQgdmFsdWUgb2JqZWN0IG9mIGEgYENhc2VGaWVsZGAgdGhhdCBpcyBhIHN1Yi1maWVsZCBvZiBhIG5vbiByb290LWxldmVsIENvbXBsZXggZmllbGQuXG4gICAqIFJlcXVpcmVkIGZvciBtYXBwaW5nIHRoZSBgQ2FzZUZpZWxkYCB2YWx1ZSB0byBhIGBGbGFnc2Agb2JqZWN0IGlmIGl0IGlzIGEgXCJGbGFnc1wiIGBDYXNlRmllbGRgLiAoRm9yIENvbXBsZXggdHlwZXMsXG4gICAqIG9ubHkgdGhlIF9yb290LWxldmVsXyBgQ2FzZUZpZWxkYCBjb250YWlucyBhIHZhbHVlIHByb3BlcnR5IC0gYWxsIHN1Yi1maWVsZHMsIGluY2x1ZGluZyBhbnkgbmVzdGVkIENvbXBsZXggZmllbGRzLFxuICAgKiBkbyAqbm90KiBjb250YWluIGFueSB2YWx1ZXMgdGhlbXNlbHZlcy4pXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGBGbGFnc1dpdGhGb3JtR3JvdXBQYXRoYCwgZWFjaCBpbnN0YW5jZSBjb21wcmlzaW5nIGEgYEZsYWdzYCBvYmplY3QgZGVyaXZlZCBmcm9tIGEgYENhc2VGaWVsZGBcbiAgICogb2YgdHlwZSBcIkZsYWdzXCIsIGFuZCB0aGUgZG90LWRlbGltaXRlZCBwYXRoIHN0cmluZyB0byB0aGUgY29ycmVzcG9uZGluZyBgRm9ybUdyb3VwYFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBleHRyYWN0RmxhZ3NEYXRhRnJvbUNhc2VGaWVsZChmbGFnczogRmxhZ3NXaXRoRm9ybUdyb3VwUGF0aFtdLCBjYXNlRmllbGQ6IENhc2VGaWVsZCxcbiAgICBwYXRoVG9GbGFnc0Zvcm1Hcm91cDogc3RyaW5nLCB0b3BMZXZlbENhc2VGaWVsZDogQ2FzZUZpZWxkLCBjdXJyZW50VmFsdWU/OiBvYmplY3QpOiBGbGFnc1dpdGhGb3JtR3JvdXBQYXRoW10ge1xuICAgICAgY29uc3QgZmllbGRUeXBlID0gY2FzZUZpZWxkLmZpZWxkX3R5cGU7XG4gICAgICBzd2l0Y2ggKGZpZWxkVHlwZS50eXBlKSB7XG4gICAgICAgIGNhc2UgJ0NvbXBsZXgnOlxuICAgICAgICAgIC8vIElmIHRoZSBmaWVsZCBpcyBhIEZsYWdzIENhc2VGaWVsZCAodGhlc2UgYXJlIGltcGxlbWVudGVkIGFzIENvbXBsZXggdHlwZXMpLCBpdCBjYW4gYmUgbWFwcGVkIHRvIGEgRmxhZ3NcbiAgICAgICAgICAvLyBvYmplY3QgaW1tZWRpYXRlbHlcbiAgICAgICAgICBpZiAoRmllbGRzVXRpbHMuaXNGbGFnc0Nhc2VGaWVsZChjYXNlRmllbGQpKSB7XG4gICAgICAgICAgICAvLyBJZiB0aGUgRmxhZ3MgQ2FzZUZpZWxkIGhhcyBhIHZhbHVlLCBpdCBpcyBhIHJvb3QtbGV2ZWwgQ29tcGxleCBmaWVsZDsgaWYgaXQgZG9lcyBub3QsIGl0IGlzIGEgRmxhZ3NcbiAgICAgICAgICAgIC8vIENhc2VGaWVsZCB0aGF0IGlzIGEgc3ViLWZpZWxkIHdpdGhpbiBhbm90aGVyIENvbXBsZXggZmllbGQsIHNvIHVzZSB0aGUgY3VycmVudFZhbHVlIHZhbHVlIChpZiBhbnkpXG4gICAgICAgICAgICAvLyBpbnN0ZWFkLiBUaGUgZXhjZXB0aW9uIHRvIHRoaXMgaXMgdGhlIFwiY2FzZUZsYWdzXCIgRmxhZ3MgQ2FzZUZpZWxkLCB3aGljaCB3aWxsIGhhdmUgYW4gZW1wdHkgb2JqZWN0IHZhbHVlXG4gICAgICAgICAgICAvLyBpbml0aWFsbHksIGJlY2F1c2Ugbm8gcGFydHkgbmFtZSBpcyByZXF1aXJlZFxuICAgICAgICAgICAgaWYgKGNhc2VGaWVsZC52YWx1ZSAmJiBGaWVsZHNVdGlscy5pc05vbkVtcHR5T2JqZWN0KGNhc2VGaWVsZC52YWx1ZSkgfHxcbiAgICAgICAgICAgICAgY2FzZUZpZWxkLmlkID09PSB0aGlzLmNhc2VMZXZlbENhc2VGbGFnc0ZpZWxkSWQpIHtcbiAgICAgICAgICAgICAgZmxhZ3MucHVzaCh0aGlzLm1hcENhc2VGaWVsZFRvRmxhZ3NXaXRoRm9ybUdyb3VwUGF0aE9iamVjdChjYXNlRmllbGQsIHBhdGhUb0ZsYWdzRm9ybUdyb3VwKSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnRWYWx1ZSAmJiBGaWVsZHNVdGlscy5pc05vbkVtcHR5T2JqZWN0KGN1cnJlbnRWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgcGF0aFRvRmxhZ3NGb3JtR3JvdXAgKz0gYC4ke2Nhc2VGaWVsZC5pZH1gO1xuICAgICAgICAgICAgICBmbGFncy5wdXNoKHRoaXMubWFwVmFsdWVUb0ZsYWdzV2l0aEZvcm1Hcm91cFBhdGhPYmplY3QoXG4gICAgICAgICAgICAgICAgY2FzZUZpZWxkLmlkLCBjdXJyZW50VmFsdWUsIHBhdGhUb0ZsYWdzRm9ybUdyb3VwLCB0b3BMZXZlbENhc2VGaWVsZCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoZmllbGRUeXBlLmNvbXBsZXhfZmllbGRzKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGNhc2VGaWVsZC52YWx1ZSA/IGNhc2VGaWVsZC52YWx1ZSA6IGN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICAgIGlmICh2YWx1ZSAmJiBGaWVsZHNVdGlscy5pc05vbkVtcHR5T2JqZWN0KHZhbHVlKSkge1xuICAgICAgICAgICAgICBmbGFncyA9IGZpZWxkVHlwZS5jb21wbGV4X2ZpZWxkcy5yZWR1Y2UoKGZsYWdzT2ZDb21wbGV4RmllbGQsIHN1YkZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXh0cmFjdEZsYWdzRGF0YUZyb21DYXNlRmllbGQoXG4gICAgICAgICAgICAgICAgICBmbGFnc09mQ29tcGxleEZpZWxkLCBzdWJGaWVsZCwgcGF0aFRvRmxhZ3NGb3JtR3JvdXAsIHRvcExldmVsQ2FzZUZpZWxkLCB2YWx1ZVtzdWJGaWVsZC5pZF0pO1xuICAgICAgICAgICAgICB9LCBmbGFncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICAvLyBGb3IgYSBDb2xsZWN0aW9uIGZpZWxkLCB0aGUgdmFsdWVzIGFyZSBzdG9yZWQgZGlyZWN0bHkgYXMga2V5LXZhbHVlIHBhaXJzIGluIHRoZSBDYXNlRmllbGQncyB2YWx1ZSBwcm9wZXJ0eVxuICAgICAgICAvLyBhcyBhbiBhcnJheSwgdW5sZXNzIHRoZSBjb2xsZWN0aW9uIGlzIGEgc3ViLWZpZWxkIG9mIGEgQ29tcGxleCB0eXBlIC0gc3ViLWZpZWxkcyBuZXZlciBjb250YWluIHZhbHVlc1xuICAgICAgICBjYXNlICdDb2xsZWN0aW9uJzpcbiAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEgY29sbGVjdGlvbiBvZiBGbGFncyBDYXNlRmllbGRzLCB0aGVzZSBjYW4gYmUgbWFwcGVkIHRvIEZsYWdzIG9iamVjdHMgaW1tZWRpYXRlbHlcbiAgICAgICAgICBpZiAoRmllbGRzVXRpbHMuaXNGbGFnc0ZpZWxkVHlwZShmaWVsZFR5cGUuY29sbGVjdGlvbl9maWVsZF90eXBlKSkge1xuICAgICAgICAgICAgLy8gSWYgdGhlIENvbGxlY3Rpb24gQ2FzZUZpZWxkIGhhcyBhIHZhbHVlIChhbiBhcnJheSksIGl0IGlzIGEgcm9vdC1sZXZlbCBDb2xsZWN0aW9uIGZpZWxkOyBpZiBpdCBkb2VzIG5vdCxcbiAgICAgICAgICAgIC8vIGl0IGlzIGEgQ29sbGVjdGlvbiBDYXNlRmllbGQgdGhhdCBpcyBhIHN1Yi1maWVsZCB3aXRoaW4gYSBDb21wbGV4IGZpZWxkLCBzbyB1c2UgdGhlIGN1cnJlbnRWYWx1ZSB2YWx1ZVxuICAgICAgICAgICAgLy8gKGlmIGFueSkgaW5zdGVhZFxuICAgICAgICAgICAgY29uc3QgcGF0aEZyYWdtZW50ID0gcGF0aFRvRmxhZ3NGb3JtR3JvdXAgKz0gJy5pbmRleC52YWx1ZSc7XG4gICAgICAgICAgICBpZiAoY2FzZUZpZWxkLnZhbHVlKSB7XG4gICAgICAgICAgICAgIGNhc2VGaWVsZC52YWx1ZS5mb3JFYWNoKChpdGVtOiB7IGlkOiBzdHJpbmc7IHZhbHVlOiBvYmplY3Q7IH0sIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBBdCBlYWNoIGl0ZXJhdGlvbiwgcmVwbGFjZSB0aGUgXCJpbmRleFwiIHBsYWNlaG9sZGVyIHdpdGggdGhlIGFjdHVhbCBpbmRleFxuICAgICAgICAgICAgICAgIHBhdGhUb0ZsYWdzRm9ybUdyb3VwID0gcGF0aEZyYWdtZW50LnJlcGxhY2UoJ2luZGV4JywgaW5kZXgudG9TdHJpbmcoMTApKTtcbiAgICAgICAgICAgICAgICBmbGFncy5wdXNoKFxuICAgICAgICAgICAgICAgICAgdGhpcy5tYXBWYWx1ZVRvRmxhZ3NXaXRoRm9ybUdyb3VwUGF0aE9iamVjdChpdGVtLmlkLCBpdGVtLnZhbHVlLCBwYXRoVG9GbGFnc0Zvcm1Hcm91cCwgY2FzZUZpZWxkKSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50VmFsdWUpIHtcbiAgICAgICAgICAgICAgKGN1cnJlbnRWYWx1ZSBhcyBbXSkuZm9yRWFjaCgoaXRlbTogeyBpZDogc3RyaW5nOyB2YWx1ZTogb2JqZWN0OyB9LCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgcGF0aFRvRmxhZ3NGb3JtR3JvdXAgPSBwYXRoRnJhZ21lbnQucmVwbGFjZSgnaW5kZXgnLCBpbmRleC50b1N0cmluZygxMCkpO1xuICAgICAgICAgICAgICAgIGZsYWdzLnB1c2goXG4gICAgICAgICAgICAgICAgICB0aGlzLm1hcFZhbHVlVG9GbGFnc1dpdGhGb3JtR3JvdXBQYXRoT2JqZWN0KGl0ZW0uaWQsIGl0ZW0udmFsdWUsIHBhdGhUb0ZsYWdzRm9ybUdyb3VwLCB0b3BMZXZlbENhc2VGaWVsZCkpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKGZpZWxkVHlwZS5jb2xsZWN0aW9uX2ZpZWxkX3R5cGUudHlwZSA9PT0gJ0NvbXBsZXgnICYmIGZpZWxkVHlwZS5jb2xsZWN0aW9uX2ZpZWxkX3R5cGUuY29tcGxleF9maWVsZHMpIHtcbiAgICAgICAgICAgIGlmIChjYXNlRmllbGQudmFsdWUpIHtcbiAgICAgICAgICAgICAgLy8gUGVyZm9ybSBhIHJlZHVjdGlvbiBvdmVyIGVhY2ggQ29tcGxleCBmaWVsZCdzIHN1Yi1maWVsZHMgKHNpbWlsYXIgdG8gd2hhdCBpcyBkb25lIGFib3ZlIGZvciBub24tRmxhZ3NcbiAgICAgICAgICAgICAgLy8gQ29tcGxleCBmaWVsZHMpXG4gICAgICAgICAgICAgIC8vIChDYW5ub3QganVzdCBjYWxsIHRoaXMgZnVuY3Rpb24gcmVjdXJzaXZlbHkgZm9yIGVhY2ggQ29tcGxleCBmaWVsZCBpbiB0aGUgY29sbGVjdGlvbiBiZWNhdXNlIHRoZSBDYXNlRmllbGRcbiAgICAgICAgICAgICAgLy8gZm9yIGVhY2ggb25lIGlzIG5vdCBwYXJ0IG9mIHRoZSBjb2xsZWN0aW9uKVxuICAgICAgICAgICAgICBjb25zdCBwYXRoRnJhZ21lbnQgPSBwYXRoVG9GbGFnc0Zvcm1Hcm91cCArPSAnLmluZGV4LnZhbHVlJztcbiAgICAgICAgICAgICAgY2FzZUZpZWxkLnZhbHVlLmZvckVhY2goKGl0ZW06IHsgaWQ6IHN0cmluZzsgdmFsdWU6IG9iamVjdDsgfSwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgIC8vIEF0IGVhY2ggaXRlcmF0aW9uLCByZXBsYWNlIHRoZSBcImluZGV4XCIgcGxhY2Vob2xkZXIgd2l0aCB0aGUgYWN0dWFsIGluZGV4XG4gICAgICAgICAgICAgICAgcGF0aFRvRmxhZ3NGb3JtR3JvdXAgPSBwYXRoRnJhZ21lbnQucmVwbGFjZSgnaW5kZXgnLCBpbmRleC50b1N0cmluZygxMCkpO1xuICAgICAgICAgICAgICAgIGZsYWdzID0gZmllbGRUeXBlLmNvbGxlY3Rpb25fZmllbGRfdHlwZS5jb21wbGV4X2ZpZWxkcy5yZWR1Y2UoKGZsYWdzT2ZDb21wbGV4RmllbGQsIHN1YkZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5leHRyYWN0RmxhZ3NEYXRhRnJvbUNhc2VGaWVsZChcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3NPZkNvbXBsZXhGaWVsZCwgc3ViRmllbGQsIHBhdGhUb0ZsYWdzRm9ybUdyb3VwLCB0b3BMZXZlbENhc2VGaWVsZCwgaXRlbS52YWx1ZVtzdWJGaWVsZC5pZF0pO1xuICAgICAgICAgICAgICAgIH0sIGZsYWdzKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIC8vIElnbm9yZSBhbGwgb3RoZXIgZmllbGQgdHlwZXNcbiAgICAgIH1cbiAgICAgIHJldHVybiBmbGFncztcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIG1hcENhc2VGaWVsZFRvRmxhZ3NXaXRoRm9ybUdyb3VwUGF0aE9iamVjdChjYXNlRmllbGQ6IENhc2VGaWVsZCxcbiAgICBwYXRoVG9GbGFnc0Zvcm1Hcm91cDogc3RyaW5nKTogRmxhZ3NXaXRoRm9ybUdyb3VwUGF0aCB7XG4gICAgICByZXR1cm4gdGhpcy5tYXBWYWx1ZVRvRmxhZ3NXaXRoRm9ybUdyb3VwUGF0aE9iamVjdChjYXNlRmllbGQuaWQsIGNhc2VGaWVsZC52YWx1ZSwgcGF0aFRvRmxhZ3NGb3JtR3JvdXAsIGNhc2VGaWVsZCk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBtYXBWYWx1ZVRvRmxhZ3NXaXRoRm9ybUdyb3VwUGF0aE9iamVjdChpZDogc3RyaW5nLCB2YWx1ZTogb2JqZWN0LFxuICAgIHBhdGhUb0ZsYWdzRm9ybUdyb3VwOiBzdHJpbmcsIGNhc2VGaWVsZDogQ2FzZUZpZWxkKTogRmxhZ3NXaXRoRm9ybUdyb3VwUGF0aCB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBmbGFnczoge1xuICAgICAgICAgIGZsYWdzQ2FzZUZpZWxkSWQ6IGlkLFxuICAgICAgICAgIHBhcnR5TmFtZTogdmFsdWUgPyB2YWx1ZVsncGFydHlOYW1lJ10gOiBudWxsLFxuICAgICAgICAgIHJvbGVPbkNhc2U6IHZhbHVlID8gdmFsdWVbJ3JvbGVPbkNhc2UnXSA6IG51bGwsXG4gICAgICAgICAgZGV0YWlsczogdmFsdWUgJiYgdmFsdWVbJ2RldGFpbHMnXSAmJiB2YWx1ZVsnZGV0YWlscyddLmxlbmd0aCA+IDBcbiAgICAgICAgICAgID8gKHZhbHVlWydkZXRhaWxzJ10gYXMgYW55W10pLm1hcChkZXRhaWwgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgLi4uT2JqZWN0LmtleXMoZGV0YWlsLnZhbHVlKS5tYXAoayA9PiB7XG4gICAgICAgICAgICAgICAgLy8gVGhlIGlkIHByb3BlcnR5IHNldCBiZWxvdyB3aWxsIGJlIG51bGwgZm9yIGEgbmV3IGNhc2UgZmxhZywgYW5kIGEgdW5pcXVlIGlkIHJldHVybmVkIGZyb20gQ0NEIHdoZW5cbiAgICAgICAgICAgICAgICAvLyB1cGRhdGluZyBhbiBleGlzdGluZyBmbGFnXG4gICAgICAgICAgICAgICAgc3dpdGNoIChrKSB7XG4gICAgICAgICAgICAgICAgICAvLyBUaGVzZSB0d28gZmllbGRzIGFyZSBkYXRlLXRpbWUgZmllbGRzXG4gICAgICAgICAgICAgICAgICBjYXNlICdkYXRlVGltZU1vZGlmaWVkJzpcbiAgICAgICAgICAgICAgICAgIGNhc2UgJ2RhdGVUaW1lQ3JlYXRlZCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7W2tdOiBkZXRhaWwudmFsdWVba10gPyBuZXcgRGF0ZShkZXRhaWwudmFsdWVba10pIDogbnVsbCwgaWQ6IGRldGFpbC5pZH07XG4gICAgICAgICAgICAgICAgICAvLyBUaGlzIGZpZWxkIGlzIGEgXCJ5ZXMvbm9cIiBmaWVsZFxuICAgICAgICAgICAgICAgICAgY2FzZSAnaGVhcmluZ1JlbGV2YW50JzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRldGFpbC52YWx1ZVtrXS50b1VwcGVyQ2FzZSgpID09PSAnWUVTJyA/IHtba106IHRydWUsIGlkOiBkZXRhaWwuaWR9IDoge1trXTogZmFsc2UsIGlkOiBkZXRhaWwuaWR9O1xuICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtba106IGRldGFpbC52YWx1ZVtrXSwgaWQ6IGRldGFpbC5pZH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9KSBhcyBGbGFnRGV0YWlsW11cbiAgICAgICAgICAgIDogbnVsbFxuICAgICAgICB9LFxuICAgICAgICBwYXRoVG9GbGFnc0Zvcm1Hcm91cCxcbiAgICAgICAgY2FzZUZpZWxkXG4gICAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENvdW50IGFjdGl2ZSBmbGFncyBpbiBhIGBDYXNlRmllbGRgIGluc3RhbmNlLCByZWN1cnNpbmcgYW5kIGl0ZXJhdGluZyB0aHJvdWdoIHN1Yi1maWVsZHMgb2YgYSBDb21wbGV4IGZpZWxkIG9yIGVhY2hcbiAgICogZmllbGQgaW4gYSBDb2xsZWN0aW9uIGZpZWxkLlxuICAgKlxuICAgKiBAcGFyYW0gYWN0aXZlQ291bnQgQW4gYWNjdW11bGF0aW9uIG9mIHRoZSB0b3RhbCBudW1iZXIgb2YgYWN0aXZlIGZsYWdzXG4gICAqIEBwYXJhbSBjYXNlRmllbGQgQSBgQ2FzZUZpZWxkYCBpbnN0YW5jZSBmb3Igd2hpY2ggdG8gY291bnQgdGhlIGFjdGl2ZSBmbGFnc1xuICAgKiBAcGFyYW0gY3VycmVudFZhbHVlIFRoZSBjdXJyZW50IHZhbHVlIG9iamVjdCBvZiBhIGBDYXNlRmllbGRgIHRoYXQgaXMgYSBzdWItZmllbGQgb2YgYSBub24gcm9vdC1sZXZlbCBDb21wbGV4IGZpZWxkLlxuICAgKiAoRm9yIENvbXBsZXggdHlwZXMsIG9ubHkgdGhlIF9yb290LWxldmVsXyBgQ2FzZUZpZWxkYCBjb250YWlucyBhIHZhbHVlIHByb3BlcnR5IC0gYWxsIHN1Yi1maWVsZHMsIGluY2x1ZGluZyBhbnlcbiAgICogbmVzdGVkIENvbXBsZXggZmllbGRzLCBkbyAqbm90KiBjb250YWluIGFueSB2YWx1ZXMgdGhlbXNlbHZlcy4pXG4gICAqIEByZXR1cm5zIFRoZSBjb3VudCBvZiBhY3RpdmUgZmxhZ3NcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY291bnRBY3RpdmVGbGFnc0luQ2FzZUZpZWxkKGFjdGl2ZUNvdW50OiBudW1iZXIsIGNhc2VGaWVsZDogQ2FzZUZpZWxkLCBjdXJyZW50VmFsdWU/OiBvYmplY3QpOiBudW1iZXIge1xuICAgICAgY29uc3QgZmllbGRUeXBlID0gY2FzZUZpZWxkLmZpZWxkX3R5cGU7XG4gICAgICBzd2l0Y2ggKGZpZWxkVHlwZS50eXBlKSB7XG4gICAgICAgIGNhc2UgJ0NvbXBsZXgnOlxuICAgICAgICAgIGlmIChGaWVsZHNVdGlscy5pc0ZsYWdzQ2FzZUZpZWxkKGNhc2VGaWVsZCkpIHtcbiAgICAgICAgICAgIC8vIElmIHRoZSBGbGFncyBDYXNlRmllbGQgaGFzIGEgdmFsdWUsIGl0IGlzIGEgcm9vdC1sZXZlbCBDb21wbGV4IGZpZWxkOyBpZiBpdCBkb2VzIG5vdCwgaXQgaXMgYSBGbGFnc1xuICAgICAgICAgICAgLy8gQ2FzZUZpZWxkIHRoYXQgaXMgYSBzdWItZmllbGQgd2l0aGluIGFub3RoZXIgQ29tcGxleCBmaWVsZCwgc28gdXNlIHRoZSBjdXJyZW50VmFsdWUgdmFsdWUgKGlmIGFueSkgaW5zdGVhZFxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBjYXNlRmllbGQudmFsdWUgPyBjYXNlRmllbGQudmFsdWUgOiBjdXJyZW50VmFsdWU7XG4gICAgICAgICAgICBpZiAodmFsdWUgJiYgRmllbGRzVXRpbHMuaXNOb25FbXB0eU9iamVjdCh2YWx1ZSkgJiYgdmFsdWUuZGV0YWlscykge1xuICAgICAgICAgICAgICBhY3RpdmVDb3VudCA9IHZhbHVlLmRldGFpbHMucmVkdWNlKFxuICAgICAgICAgICAgICAgIChjb3VudCwgZGV0YWlsKSA9PiBkZXRhaWwudmFsdWUuc3RhdHVzID09PSBDYXNlRmxhZ1N0YXR1cy5BQ1RJVkUgPyBjb3VudCArIDEgOiBjb3VudCxcbiAgICAgICAgICAgICAgICBhY3RpdmVDb3VudFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoZmllbGRUeXBlLmNvbXBsZXhfZmllbGRzKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGNhc2VGaWVsZC52YWx1ZSA/IGNhc2VGaWVsZC52YWx1ZSA6IGN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICAgIGlmICh2YWx1ZSAmJiBGaWVsZHNVdGlscy5pc05vbkVtcHR5T2JqZWN0KHZhbHVlKSkge1xuICAgICAgICAgICAgICBhY3RpdmVDb3VudCA9IGZpZWxkVHlwZS5jb21wbGV4X2ZpZWxkcy5yZWR1Y2UoKGFjdGl2ZUZsYWdzQ291bnRPZkNvbXBsZXhGaWVsZCwgc3ViRmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb3VudEFjdGl2ZUZsYWdzSW5DYXNlRmllbGQoXG4gICAgICAgICAgICAgICAgICBhY3RpdmVGbGFnc0NvdW50T2ZDb21wbGV4RmllbGQsXG4gICAgICAgICAgICAgICAgICBzdWJGaWVsZCxcbiAgICAgICAgICAgICAgICAgIHZhbHVlW3N1YkZpZWxkLmlkXVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH0sIGFjdGl2ZUNvdW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIC8vIEZvciBhIENvbGxlY3Rpb24gZmllbGQsIHRoZSB2YWx1ZXMgYXJlIHN0b3JlZCBkaXJlY3RseSBhcyBrZXktdmFsdWUgcGFpcnMgaW4gdGhlIENhc2VGaWVsZCdzIHZhbHVlIHByb3BlcnR5XG4gICAgICAgIC8vIGFzIGFuIGFycmF5LCB1bmxlc3MgdGhlIGNvbGxlY3Rpb24gaXMgYSBzdWItZmllbGQgb2YgYSBDb21wbGV4IHR5cGUgLSBzdWItZmllbGRzIG5ldmVyIGNvbnRhaW4gdmFsdWVzXG4gICAgICAgIGNhc2UgJ0NvbGxlY3Rpb24nOlxuICAgICAgICAgIGlmIChGaWVsZHNVdGlscy5pc0ZsYWdzRmllbGRUeXBlKGZpZWxkVHlwZS5jb2xsZWN0aW9uX2ZpZWxkX3R5cGUpKSB7XG4gICAgICAgICAgICAvLyBJZiB0aGUgQ29sbGVjdGlvbiBDYXNlRmllbGQgaGFzIGEgdmFsdWUgKGFuIGFycmF5KSwgaXQgaXMgYSByb290LWxldmVsIENvbGxlY3Rpb24gZmllbGQ7IGlmIGl0IGRvZXMgbm90LFxuICAgICAgICAgICAgLy8gaXQgaXMgYSBDb2xsZWN0aW9uIENhc2VGaWVsZCB0aGF0IGlzIGEgc3ViLWZpZWxkIHdpdGhpbiBhIENvbXBsZXggZmllbGQsIHNvIHVzZSB0aGUgY3VycmVudFZhbHVlIHZhbHVlXG4gICAgICAgICAgICAvLyAoaWYgYW55KSBpbnN0ZWFkXG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGNhc2VGaWVsZC52YWx1ZSA/IGNhc2VGaWVsZC52YWx1ZSA6IGN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICB2YWx1ZS5mb3JFYWNoKChpdGVtOiB7IGlkOiBzdHJpbmc7IHZhbHVlOiBvYmplY3Q7IH0pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS52YWx1ZVsnZGV0YWlscyddKSB7XG4gICAgICAgICAgICAgICAgICBhY3RpdmVDb3VudCA9IGl0ZW0udmFsdWVbJ2RldGFpbHMnXS5yZWR1Y2UoXG4gICAgICAgICAgICAgICAgICAgIChjb3VudCwgZGV0YWlsKSA9PiBkZXRhaWwudmFsdWUuc3RhdHVzID09PSBDYXNlRmxhZ1N0YXR1cy5BQ1RJVkUgPyBjb3VudCArIDEgOiBjb3VudCxcbiAgICAgICAgICAgICAgICAgICAgYWN0aXZlQ291bnRcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKGZpZWxkVHlwZS5jb2xsZWN0aW9uX2ZpZWxkX3R5cGUudHlwZSA9PT0gJ0NvbXBsZXgnICYmIGZpZWxkVHlwZS5jb2xsZWN0aW9uX2ZpZWxkX3R5cGUuY29tcGxleF9maWVsZHMpIHtcbiAgICAgICAgICAgIGlmIChjYXNlRmllbGQudmFsdWUpIHtcbiAgICAgICAgICAgICAgLy8gUGVyZm9ybSBhIHJlZHVjdGlvbiBvdmVyIGVhY2ggQ29tcGxleCBmaWVsZCdzIHN1Yi1maWVsZHMgKHNpbWlsYXIgdG8gd2hhdCBpcyBkb25lIGFib3ZlIGZvciBub24tRmxhZ3NcbiAgICAgICAgICAgICAgLy8gQ29tcGxleCBmaWVsZHMpXG4gICAgICAgICAgICAgIC8vIChDYW5ub3QganVzdCBjYWxsIHRoaXMgZnVuY3Rpb24gcmVjdXJzaXZlbHkgZm9yIGVhY2ggQ29tcGxleCBmaWVsZCBpbiB0aGUgY29sbGVjdGlvbiBiZWNhdXNlIHRoZSBDYXNlRmllbGRcbiAgICAgICAgICAgICAgLy8gZm9yIGVhY2ggb25lIGlzIG5vdCBwYXJ0IG9mIHRoZSBjb2xsZWN0aW9uKVxuICAgICAgICAgICAgICBjYXNlRmllbGQudmFsdWUuZm9yRWFjaCgoaXRlbTogeyBpZDogc3RyaW5nOyB2YWx1ZTogb2JqZWN0OyB9KSA9PiB7XG4gICAgICAgICAgICAgICAgYWN0aXZlQ291bnQgPSBmaWVsZFR5cGUuY29sbGVjdGlvbl9maWVsZF90eXBlLmNvbXBsZXhfZmllbGRzLnJlZHVjZShcbiAgICAgICAgICAgICAgICAgIChhY3RpdmVGbGFnc0NvdW50T2ZDb21wbGV4RmllbGQsIHN1YkZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvdW50QWN0aXZlRmxhZ3NJbkNhc2VGaWVsZChhY3RpdmVGbGFnc0NvdW50T2ZDb21wbGV4RmllbGQsIHN1YkZpZWxkLCBpdGVtLnZhbHVlW3N1YkZpZWxkLmlkXSk7XG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgYWN0aXZlQ291bnRcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgLy8gSWdub3JlIGFsbCBvdGhlciBmaWVsZCB0eXBlc1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjdGl2ZUNvdW50O1xuICB9XG5cbiAgcHVibGljIGJ1aWxkQ2FuU2hvd1ByZWRpY2F0ZShldmVudFRyaWdnZXI6IENhc2VFdmVudFRyaWdnZXIsIGZvcm06IGFueSk6IFByZWRpY2F0ZTxXaXphcmRQYWdlPiB7XG4gICAgY29uc3QgY3VycmVudFN0YXRlID0gdGhpcy5nZXRDdXJyZW50RXZlbnRTdGF0ZShldmVudFRyaWdnZXIsIGZvcm0pO1xuICAgIHJldHVybiAocGFnZTogV2l6YXJkUGFnZSk6IGJvb2xlYW4gPT4ge1xuICAgICAgcmV0dXJuIHBhZ2UucGFyc2VkU2hvd0NvbmRpdGlvbi5tYXRjaChjdXJyZW50U3RhdGUpO1xuICAgIH07XG4gIH1cblxuICBwdWJsaWMgZ2V0Q3VycmVudEV2ZW50U3RhdGUoZXZlbnRUcmlnZ2VyOiB7IGNhc2VfZmllbGRzOiBDYXNlRmllbGRbXSB9LCBmb3JtOiBGb3JtR3JvdXApOiBvYmplY3Qge1xuICAgIHJldHVybiB0aGlzLm1lcmdlQ2FzZUZpZWxkc0FuZEZvcm1GaWVsZHMoZXZlbnRUcmlnZ2VyLmNhc2VfZmllbGRzLCBmb3JtLmNvbnRyb2xzWydkYXRhJ10udmFsdWUpO1xuICB9XG5cbiAgcHVibGljIGNsb25lQ2FzZUZpZWxkKG9iajogYW55KTogQ2FzZUZpZWxkIHtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgQ2FzZUZpZWxkKCksIG9iaik7XG4gIH1cblxuICBwdWJsaWMgbWVyZ2VDYXNlRmllbGRzQW5kRm9ybUZpZWxkcyhjYXNlRmllbGRzOiBDYXNlRmllbGRbXSwgZm9ybUZpZWxkczogb2JqZWN0KTogb2JqZWN0IHtcbiAgICByZXR1cm4gdGhpcy5tZXJnZUZpZWxkcyhjYXNlRmllbGRzLCBmb3JtRmllbGRzLCBGaWVsZHNVdGlscy5ERUZBVUxUX01FUkdFX0ZVTkNUSU9OKTtcbiAgfVxuXG4gIHB1YmxpYyBtZXJnZUxhYmVsQ2FzZUZpZWxkc0FuZEZvcm1GaWVsZHMoY2FzZUZpZWxkczogQ2FzZUZpZWxkW10sIGZvcm1GaWVsZHM6IG9iamVjdCk6IG9iamVjdCB7XG4gICAgcmV0dXJuIHRoaXMubWVyZ2VGaWVsZHMoY2FzZUZpZWxkcywgZm9ybUZpZWxkcywgRmllbGRzVXRpbHMuTEFCRUxfTUVSR0VfRlVOQ1RJT04pO1xuICB9XG5cbiAgcHVibGljIGNvbnRyb2xJdGVyYXRvcihcbiAgICBhQ29udHJvbDogQWJzdHJhY3RDb250cm9sLFxuICAgIGZvcm1BcnJheUZuOiAoYXJyYXk6IEZvcm1BcnJheSkgPT4gdm9pZCxcbiAgICBmb3JtR3JvdXBGbjogKGdyb3VwOiBGb3JtR3JvdXApID0+IHZvaWQsXG4gICAgY29udHJvbEZuOiAoY29udHJvbDogRm9ybUNvbnRyb2wpID0+IHZvaWRcbiAgKTogdm9pZCB7XG4gICAgaWYgKGFDb250cm9sIGluc3RhbmNlb2YgRm9ybUFycmF5KSB7IC8vIFdlJ3JlIGluIGEgY29sbGVjdGlvblxuICAgICAgZm9ybUFycmF5Rm4oYUNvbnRyb2wpO1xuICAgIH0gZWxzZSBpZiAoYUNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtR3JvdXApIHsgLy8gV2UncmUgaW4gYSBjb21wbGV4IHR5cGUuXG4gICAgICBmb3JtR3JvdXBGbihhQ29udHJvbCk7XG4gICAgfSBlbHNlIGlmIChhQ29udHJvbCBpbnN0YW5jZW9mIEZvcm1Db250cm9sKSB7IC8vIEZvcm1Db250cm9sXG4gICAgICBjb250cm9sRm4oYUNvbnRyb2wpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWVyZ2VGaWVsZHMoY2FzZUZpZWxkczogQ2FzZUZpZWxkW10sIGZvcm1GaWVsZHM6IG9iamVjdCwgbWVyZ2VGdW5jdGlvbjogKGZpZWxkOiBDYXNlRmllbGQsIHJlc3VsdDogb2JqZWN0KSA9PiB2b2lkKTogb2JqZWN0IHtcbiAgICBjb25zdCByZXN1bHQ6IG9iamVjdCA9IEZpZWxkc1V0aWxzLmNsb25lT2JqZWN0KGZvcm1GaWVsZHMpO1xuICAgIGNhc2VGaWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICBtZXJnZUZ1bmN0aW9uKGZpZWxkLCByZXN1bHQpO1xuICAgICAgaWYgKGZpZWxkLmZpZWxkX3R5cGUgJiYgZmllbGQuZmllbGRfdHlwZS5jb21wbGV4X2ZpZWxkcyAmJiBmaWVsZC5maWVsZF90eXBlLmNvbXBsZXhfZmllbGRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmVzdWx0W2ZpZWxkLmlkXSA9IHRoaXMubWVyZ2VGaWVsZHMoZmllbGQuZmllbGRfdHlwZS5jb21wbGV4X2ZpZWxkcywgcmVzdWx0W2ZpZWxkLmlkXSwgbWVyZ2VGdW5jdGlvbik7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufVxuIl19
|
|
552
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGRzLnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2NkLWNhc2UtdWktdG9vbGtpdC9zcmMvbGliL3NoYXJlZC9zZXJ2aWNlcy9maWVsZHMvZmllbGRzLnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBbUIsU0FBUyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUkxRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0VBQWdFLENBQUM7QUFDaEcsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzFELE9BQU8sRUFBb0IsU0FBUyxFQUF5RSxNQUFNLGNBQWMsQ0FBQztBQUNsSSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQzs7QUFFbkYsV0FBVztBQUVYLE1BQU0sT0FBTyxXQUFXO0lBWWYsTUFBTSxDQUFDLGtCQUFrQixDQUFDLEdBQVE7UUFDdkMsSUFBSSxDQUFDLENBQUMsR0FBRyxZQUFZLFNBQVMsQ0FBQyxFQUFFO1lBQy9CLE9BQU8scUJBQXFCLENBQUMsSUFBSSxTQUFTLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztTQUNwRDtRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVNLE1BQU0sQ0FBQyxXQUFXLENBQUMsVUFBdUI7UUFDL0MsTUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDekIsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FB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QUMsQ0FBQzs2QkFDSjs0QkFDRCxNQUFNO3lCQUNQO3FCQUNGO2dCQUNILENBQUMsQ0FBQyxDQUFDO2FBQ0o7WUFDRCxNQUFNO1NBQ1A7S0FDRjtBQUNILENBQUMsQ0FBQztzRUFwT1MsV0FBVzttREFBWCxXQUFXLFdBQVgsV0FBVzt1RkFBWCxXQUFXO2NBRHZCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDdXJyZW5jeVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtQXJyYXksIEZvcm1Db250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBwbGFpblRvQ2xhc3NGcm9tRXhpc3QgfSBmcm9tICdjbGFzcy10cmFuc2Zvcm1lcic7XG5pbXBvcnQgeyBXaXphcmRQYWdlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9jYXNlLWVkaXRvci9kb21haW4nO1xuaW1wb3J0IHsgQWJzdHJhY3RGb3JtRmllbGRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL3BhbGV0dGUvYmFzZS1maWVsZC9hYnN0cmFjdC1mb3JtLWZpZWxkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGbGFnRGV0YWlsLCBGbGFnc1dpdGhGb3JtR3JvdXBQYXRoIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9wYWxldHRlL2Nhc2UtZmxhZy9kb21haW4vY2FzZS1mbGFnLm1vZGVsJztcbmltcG9ydCB7IENhc2VGbGFnU3RhdHVzIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9wYWxldHRlL2Nhc2UtZmxhZy9lbnVtcy9jYXNlLWZsYWctc3RhdHVzLmVudW0nO1xuaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL3BhbGV0dGUvdXRpbHMnO1xuaW1wb3J0IHsgQ2FzZUV2ZW50VHJpZ2dlciwgQ2FzZUZpZWxkLCBDYXNlVGFiLCBDYXNlVmlldywgRmllbGRUeXBlLCBGaWVsZFR5cGVFbnVtLCBGaXhlZExpc3RJdGVtLCBQcmVkaWNhdGUgfSBmcm9tICcuLi8uLi9kb21haW4nO1xuaW1wb3J0IHsgRm9ybWF0VHJhbnNsYXRvclNlcnZpY2UgfSBmcm9tICcuLi9jYXNlLWZpZWxkcy9mb3JtYXQtdHJhbnNsYXRvci5zZXJ2aWNlJztcblxuLy8gQGR5bmFtaWNcbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBGaWVsZHNVdGlscyB7XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgY2FzZUxldmVsQ2FzZUZsYWdzRmllbGRJZCA9ICdjYXNlRmxhZ3MnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBjdXJyZW5jeVBpcGU6IEN1cnJlbmN5UGlwZSA9IG5ldyBDdXJyZW5jeVBpcGUoJ2VuLUdCJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IGRhdGVQaXBlOiBEYXRlUGlwZSA9IG5ldyBEYXRlUGlwZShuZXcgRm9ybWF0VHJhbnNsYXRvclNlcnZpY2UoKSk7XG4gIC8vIEVVSS00MjQ0LiAzIGRhc2hlcyBpbnN0ZWFkIG9mIDEgdG8gbWFrZSB0aGlzIGxlc3MgbGlrZWx5IHRvIGNsYXNoIHdpdGggYSByZWFsIGZpZWxkLlxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IExBQkVMX1NVRkZJWCA9ICctLS1MQUJFTCc7XG4gIC8vIEhhbmRsaW5nIG9mIER5bmFtaWMgTGlzdHMgaW4gQ29tcGxleCBUeXBlc1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNFUlZFUl9SRVNQT05TRV9GSUVMRF9UWVBFX0NPTExFQ1RJT04gPSAnQ29sbGVjdGlvbic7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU0VSVkVSX1JFU1BPTlNFX0ZJRUxEX1RZUEVfQ09NUExFWCA9ICdDb21wbGV4JztcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBTRVJWRVJfUkVTUE9OU0VfRklFTERfVFlQRV9EWU5BTUlDX0xJU1RfVFlQRTogRmllbGRUeXBlRW51bVtdID0gWydEeW5hbWljTGlzdCcsICdEeW5hbWljUmFkaW9MaXN0J107XG5cbiAgcHVibGljIHN0YXRpYyBjb252ZXJ0VG9DYXNlRmllbGQob2JqOiBhbnkpOiBDYXNlRmllbGQge1xuICAgIGlmICghKG9iaiBpbnN0YW5jZW9mIENhc2VGaWVsZCkpIHtcbiAgICAgIHJldHVybiBwbGFpblRvQ2xhc3NGcm9tRXhpc3QobmV3IENhc2VGaWVsZCgpLCBvYmopO1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyB0b1ZhbHVlc01hcChjYXNlRmllbGRzOiBDYXNlRmllbGRbXSk6IGFueSB7XG4gICAgY29uc3QgdmFsdWVNYXAgPSB7fTtcbiAgICBjYXNlRmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgdmFsdWVNYXBbZmllbGQuaWRdID0gRmllbGRzVXRpbHMucHJlcGFyZVZhbHVlKGZpZWxkKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdmFsdWVNYXA7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGdldFR5cGUoZWxlbTogYW55KTogc3RyaW5nIHtcbiAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGVsZW0pLnNsaWNlKDgsIC0xKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgaXNPYmplY3QoZWxlbTogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiBlbGVtID09PSAnb2JqZWN0JyAmJiBlbGVtICE9PSBudWxsO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBpc05vbkVtcHR5T2JqZWN0KGVsZW06IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzT2JqZWN0KGVsZW0pICYmIE9iamVjdC5rZXlzKGVsZW0pLmxlbmd0aCAhPT0gMDtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgaXNBcnJheShlbGVtOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShlbGVtKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgYXJlQ29sbGVjdGlvblZhbHVlc1NpbXBsZUZpZWxkcyhmaWVsZFZhbHVlOiBhbnlbXSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5pc09iamVjdChmaWVsZFZhbHVlWzBdWyd2YWx1ZSddKSAmJiAhQXJyYXkuaXNBcnJheShmaWVsZFZhbHVlWzBdWyd2YWx1ZSddKSAmJiBmaWVsZFZhbHVlWzBdWyd2YWx1ZSddICE9PSB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGlzQ29sbGVjdGlvbk9mU2ltcGxlVHlwZXMoZmllbGRWYWx1ZTogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNDb2xsZWN0aW9uKGZpZWxkVmFsdWUpICYmIHRoaXMuYXJlQ29sbGVjdGlvblZhbHVlc1NpbXBsZUZpZWxkcyhmaWVsZFZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgaXNNdWx0aVNlbGVjdFZhbHVlKGZvcm06IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzTm9uRW1wdHlBcnJheShmb3JtKSAmJiAhdGhpcy5pc0NvbGxlY3Rpb25XaXRoVmFsdWUoZm9ybSk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGlzTm9uRW1wdHlBcnJheShwYWdlRm9ybUZpZWxkczogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkocGFnZUZvcm1GaWVsZHMpICYmIHBhZ2VGb3JtRmllbGRzWzBdICE9PSB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGlzQ29sbGVjdGlvbihwYWdlRm9ybUZpZWxkczogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNOb25FbXB0eUFycmF5KHBhZ2VGb3JtRmllbGRzKSAmJiB0aGlzLmlzQ29sbGVjdGlvbldpdGhWYWx1ZShwYWdlRm9ybUZpZWxkcyk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGlzQ29sbGVjdGlvbldpdGhWYWx1ZShwYWdlRm9ybUZpZWxkczogYW55W10pOiBib29sZWFuIHtcbiAgICByZXR1cm4gcGFnZUZvcm1GaWVsZHNbMF1bJ3ZhbHVlJ10gIT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgY2xvbmVPYmplY3Qob2JqOiBhbnkpOiBhbnkge1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBvYmopO1xuICB9XG5cbiAgLy8gdGVtcG9yYXJ5IGZ1bmN0aW9uIHVudGlsIHRoaXMgY2FuIGJlIG1vdmVkIHRvIENhc2VWaWV3IGNsYXNzIChSRE0tMjY4MSlcbiAgcHVibGljIHN0YXRpYyBnZXRDYXNlRmllbGRzKGNhc2VWaWV3OiBDYXNlVmlldyk6IENhc2VGaWVsZFtdIHtcbiAgICBjb25zdCBjYXNlRGF0YUZpZWxkczogQ2FzZUZpZWxkW10gPSBjYXNlVmlldy50YWJzLnJlZHVjZSgoYWNjOiBDYXNlRmllbGRbXSwgdGFiOiBDYXNlVGFiKSA9PiB7XG4gICAgICByZXR1cm4gYWNjLmNvbmNhdCh0YWIuZmllbGRzKTtcbiAgICB9LCBbXSk7XG5cbiAgICBjb25zdCBtZXRhZGF0YUZpZWxkczogQ2FzZUZpZWxkW10gPSBjYXNlVmlldy5tZXRhZGF0YUZpZWxkcztcbiAgICByZXR1cm4gbWV0YWRhdGFGaWVsZHMuY29uY2F0KGNhc2VEYXRhRmllbGRzLmZpbHRlcigoY2FzZUZpZWxkOiBDYXNlRmllbGQpID0+IHtcbiAgICAgIHJldHVybiBtZXRhZGF0YUZpZWxkcy5maW5kSW5kZXgobWV0YWRhdGFGaWVsZCA9PiBtZXRhZGF0YUZpZWxkLmlkID09PSBjYXNlRmllbGQuaWQpIDwgMDtcbiAgICB9KSk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGFkZENhc2VGaWVsZEFuZENvbXBvbmVudFJlZmVyZW5jZXMgKGM6IEFic3RyYWN0Q29udHJvbCwgY2Y6IENhc2VGaWVsZCwgY29tcDogQWJzdHJhY3RGb3JtRmllbGRDb21wb25lbnQpOiB2b2lkIHtcbiAgICBjWydjYXNlRmllbGQnXSA9IGNmO1xuICAgIGNbJ2NvbXBvbmVudCddID0gY29tcDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWN1cnNpdmUgY2hlY2sgb2YgYW4gYXJyYXkgb3Igb2JqZWN0IGFuZCBpdHMgZGVzY2VuZGFudHMgZm9yIHRoZSBwcmVzZW5jZSBvZiBhbnkgbm9uLWVtcHR5IHZhbHVlcy5cbiAgICpcbiAgICogQHBhcmFtIG9iamVjdCBUaGUgYXJyYXkgb3Igb2JqZWN0IHRvIGNoZWNrXG4gICAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgYXJyYXkgb3Igb2JqZWN0IChvciBhIGRlc2NlbmRhbnQpIGNvbnRhaW5zIGF0IGxlYXN0IG9uZSBub24tZW1wdHkgdmFsdWU7IGBmYWxzZWAgb3RoZXJ3aXNlXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNvbnRhaW5zTm9uRW1wdHlWYWx1ZXMob2JqZWN0OiBvYmplY3QpOiBib29sZWFuIHtcbiAgICBpZiAoIW9iamVjdCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCB2YWx1ZXMgPSBPYmplY3Qua2V5cyhvYmplY3QpLm1hcChrZXkgPT4gb2JqZWN0W2tleV0pO1xuICAgIGNvbnN0IG9iamVjdFJlZnMgPSBbXTtcbiAgICAvLyBBbHNvIHRlc3QgZm9yIG51bWVyaWMgdmFsdWVzLCBhbmQgbGVuZ3RoID4gMCBmb3Igbm9uLW51bWVyaWMgdmFsdWVzIGJlY2F1c2UgdGhpcyBjb3ZlcnMgYm90aCBzdHJpbmdzIGFuZCBhcnJheXMuXG4gICAgLy8gTm90ZTogRGVsaWJlcmF0ZSB1c2Ugb2Ygbm9uLWVxdWFsaXR5ICghPSkgb3BlcmF0b3IgZm9yIG51bGwgY2hlY2ssIHRvIGhhbmRsZSBib3RoIG51bGwgYW5kIHVuZGVmaW5lZCB2YWx1ZXMuXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiB0cmlwbGUtZXF1YWxzXG4gICAgY29uc3QgaGFzTm9uTnVsbFByaW1pdGl2ZSA9IHZhbHVlcy5zb21lKHggPT4gKHggIT0gbnVsbCAmJlxuICAgICAgKCh0eXBlb2YgeCA9PT0gJ29iamVjdCcgJiYgeC5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0KSB8fCBBcnJheS5pc0FycmF5KHgpXG4gICAgICAgID8gIW9iamVjdFJlZnMucHVzaCh4KVxuICAgICAgICA6IHR5cGVvZiB4ID09PSAnbnVtYmVyJyB8fCB4Lmxlbmd0aCA+IDApXG4gICAgKSk7XG4gICAgcmV0dXJuICFoYXNOb25OdWxsUHJpbWl0aXZlID8gb2JqZWN0UmVmcy5zb21lKHkgPT4gdGhpcy5jb250YWluc05vbkVtcHR5VmFsdWVzKHkpKSA6IGhhc05vbk51bGxQcmltaXRpdmU7XG4gIH1cblxuICAvKipcbiAgICogaGFuZGxlTmVzdGVkRHluYW1pY0xpc3RzKClcbiAgICogUmVhc3NpZ25zIGxpc3RfaXRlbSBhbmQgdmFsdWUgZGF0YSB0byBEeW5hbWljTGlzdCBjaGlsZHJlblxuICAgKiBkb3duIHRoZSB0cmVlLiBTZXJ2ZXIgcmVzcG9uc2UgcmV0dXJucyBkYXRhIG9ubHkgaW5cbiAgICogdGhlIGB2YWx1ZWAgb2JqZWN0IG9mIHBhcmVudCBjb21wbGV4IHR5cGVcbiAgICpcbiAgICogRVVJLTI1MzAgRHluYW1pYyBMaXN0cyBmb3IgRWxlbWVudHMgaW4gYSBDb21wbGV4IFR5cGVcbiAgICpcbiAgICogQHBhcmFtIGpzb25Cb2R5IC0geyBjYXNlX2ZpZWxkczogWyBDYXNlRmllbGQsIENhc2VGaWVsZCBdIH1cbiAgICovXG4gICBwdWJsaWMgc3RhdGljIGhhbmRsZU5lc3RlZER5bmFtaWNMaXN0cyhqc29uQm9keTogeyBjYXNlX2ZpZWxkczogQ2FzZUZpZWxkW10gfSk6IGFueSB7XG5cbiAgICBpZiAoanNvbkJvZHkuY2FzZV9maWVsZHMpIHtcbiAgICAgIGpzb25Cb2R5LmNhc2VfZmllbGRzLmZvckVhY2goY2FzZUZpZWxkID0+IHtcbiAgICAgICAgaWYgKGNhc2VGaWVsZC5maWVsZF90eXBlKSB7XG4gICAgICAgICAgdGhpcy5zZXREeW5hbWljTGlzdERlZmluaXRpb24oY2FzZUZpZWxkLCBjYXNlRmllbGQuZmllbGRfdHlwZSwgY2FzZUZpZWxkKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGpzb25Cb2R5O1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcHJlcGFyZVZhbHVlKGZpZWxkOiBDYXNlRmllbGQpOiBhbnkge1xuICAgIGlmIChmaWVsZC52YWx1ZSkge1xuICAgICAgcmV0dXJuIGZpZWxkLnZhbHVlO1xuICAgIH0gZWxzZSBpZiAoZmllbGQuaXNDb21wbGV4KCkpIHtcbiAgICAgIGNvbnN0IHZhbHVlTWFwID0ge307XG4gICAgICBmaWVsZC5maWVsZF90eXBlLmNvbXBsZXhfZmllbGRzLmZvckVhY2goY29tcGxleEZpZWxkID0+IHtcbiAgICAgICAgdmFsdWVNYXBbY29tcGxleEZpZWxkLmlkXSA9IEZpZWxkc1V0aWxzLnByZXBhcmVWYWx1ZShjb21wbGV4RmllbGQpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gdmFsdWVNYXA7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9NRVJHRV9GVU5DVElPTiA9IGZ1bmN0aW9uIG1lcmdlRnVuY3Rpb24oZmllbGQ6IENhc2VGaWVsZCwgcmVzdWx0OiBvYmplY3QpOiB2b2lkIHtcbiAgICBpZiAoIXJlc3VsdC5oYXNPd25Qcm9wZXJ0eShmaWVsZC5pZCkpIHtcbiAgICAgIHJlc3VsdFtmaWVsZC5pZF0gPSBmaWVsZC52YWx1ZTtcbiAgICB9XG4gIH07XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgTEFCRUxfTUVSR0VfRlVOQ1RJT04gPSBmdW5jdGlvbiBtZXJnZUZ1bmN0aW9uKGZpZWxkOiBDYXNlRmllbGQsIHJlc3VsdDogb2JqZWN0KTogdm9pZCB7XG4gICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgIHJlc3VsdCA9IHt9XG4gICAgfVxuICAgIGlmICghcmVzdWx0Lmhhc093blByb3BlcnR5KGZpZWxkLmlkKSkge1xuICAgICAgcmVzdWx0W2ZpZWxkLmlkXSA9IGZpZWxkLnZhbHVlO1xuICAgIH1cblxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogc3dpdGNoLWRlZmF1bHRcbiAgICBzd2l0Y2ggKGZpZWxkLmZpZWxkX3R5cGUudHlwZSkge1xuICAgICAgY2FzZSAnRml4ZWRMaXN0JzpcbiAgICAgIGNhc2UgJ0ZpeGVkUmFkaW9MaXN0Jzoge1xuICAgICAgICByZXN1bHRbZmllbGQuaWRdID0gRmllbGRzVXRpbHMuZ2V0Rml4ZWRMaXN0TGFiZWxCeUNvZGVPckVtcHR5KGZpZWxkLCByZXN1bHRbZmllbGQuaWRdIHx8IGZpZWxkLnZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdNdWx0aVNlbGVjdExpc3QnOiB7XG4gICAgICAgIGNvbnN0IGZpZWxkVmFsdWUgPSByZXN1bHRbZmllbGQuaWRdIHx8IFtdO1xuICAgICAgICByZXN1bHRbZmllbGQuaWQgKyBGaWVsZHNVdGlscy5MQUJFTF9TVUZGSVhdID0gW107XG4gICAgICAgIGZpZWxkVmFsdWUuZm9yRWFjaCgoY29kZTogYW55LCBpZHg6IGFueSkgPT4ge1xuICAgICAgICAgIHJlc3VsdFtmaWVsZC5pZCArIEZpZWxkc1V0aWxzLkxBQkVMX1NVRkZJWF1baWR4XSA9IEZpZWxkc1V0aWxzLmdldEZpeGVkTGlzdExhYmVsQnlDb2RlT3JFbXB0eShmaWVsZCwgY29kZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ0xhYmVsJzoge1xuICAgICAgICByZXN1bHRbZmllbGQuaWRdID0gRmllbGRzVXRpbHMuZ2V0TGFiZWwoZmllbGQpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ01vbmV5R0JQJzoge1xuICAgICAgICBjb25zdCBmaWVsZFZhbHVlID0gKHJlc3VsdFtmaWVsZC5pZF0gfHwgZmllbGQudmFsdWUpO1xuICAgICAgICByZXN1bHRbZmllbGQuaWRdID0gRmllbGRzVXRpbHMuZ2V0TW9uZXlHQlAoZmllbGRWYWx1ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnRGF0ZSc6IHtcbiAgICAgICAgY29uc3QgZmllbGRWYWx1ZSA9IChyZXN1bHRbZmllbGQuaWRdIHx8IGZpZWxkLnZhbHVlKTtcbiAgICAgICAgcmVzdWx0W2ZpZWxkLmlkXSA9IEZpZWxkc1V0aWxzLmdldERhdGUoZmllbGRWYWx1ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnQ29tcGxleCc6IHtcbiAgICAgICAgaWYgKHJlc3VsdFtmaWVsZC5pZF0gJiYgZmllbGQuZmllbGRfdHlwZS5jb21wbGV4X2ZpZWxkcykge1xuICAgICAgICAgIGZpZWxkLmZpZWxkX3R5cGUuY29tcGxleF9maWVsZHMuZm9yRWFjaCgoZjogQ2FzZUZpZWxkKSA9PiB7XG4gICAgICAgICAgICBpZiAoWydDb2xsZWN0aW9uJywgJ0NvbXBsZXgnLCAnTXVsdGlTZWxlY3RMaXN0J10uaW5kZXhPZihmLmZpZWxkX3R5cGUudHlwZSkgPiAtMSkge1xuICAgICAgICAgICAgICBGaWVsZHNVdGlscy5MQUJFTF9NRVJHRV9GVU5DVElPTihmLCByZXN1bHRbZmllbGQuaWRdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ0NvbGxlY3Rpb24nOiB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRzID0gKHJlc3VsdFtmaWVsZC5pZF0gfHwgZmllbGQudmFsdWUpO1xuICAgICAgICBpZiAoZWxlbWVudHMpIHtcbiAgICAgICAgICBlbGVtZW50cy5mb3JFYWNoKChlbGVtOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHN3aXRjaCAoZmllbGQuZmllbGRfdHlwZS5jb2xsZWN0aW9uX2ZpZWxkX3R5cGUudHlwZSkge1xuICAgICAgICAgICAgICBjYXNlICdNb25leUdCUCc6IHtcbiAgICAgICAgICAgICAgICBlbGVtLnZhbHVlID0gRmllbGRzVXRpbHMuZ2V0TW9uZXlHQlAoZWxlbS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSAnRGF0ZSc6IHtcbiAgICAgICAgICAgICAgICBlbGVtLnZhbHVlID0gRmllbGRzVXRpbHMuZ2V0RGF0ZShlbGVtLnZhbHVlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlICdDb21wbGV4Jzoge1xuICAgICAgICAgICAgICAgIGlmIChmaWVsZC5maWVsZF90eXBlLmNvbGxlY3Rpb25fZmllbGRfdHlwZS5jb21wbGV4X2ZpZWxkcykge1xuICAgICAgICAgICAgICAgICAgZmllbGQuZmllbGRfdHlwZS5jb2xsZWN0aW9uX2ZpZWxkX3R5cGUuY29tcGxleF9maWVsZHMuZm9yRWFjaCgoZjogQ2FzZUZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChbJ0NvbGxlY3Rpb24nLCAnQ29tcGxleCcsICdNdWx0aVNlbGVjdExpc3QnXS5pbmRleE9mKGYuZmllbGRfdHlwZS50eXBlKSA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgRmllbGRzVXRpbHMuTEFCRUxfTUVSR0VfRlVOQ1RJT04oZiwgZWxlbS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogRm9ybWF0cyBhIGBNb25leUdCUGAgdmFsdWUgdG8gaW5jbHVkZSBjdXJyZW5jeSB1bml0cy5cbiAgICogQHBhcmFtIGZpZWxkVmFsdWUgVGhlIEN1cnJlbmN5UGlwZSBleHBlY3RzIGFuIGBhbnlgIHBhcmFtZXRlciBzbyB0aGlzIG11c3QgYWxzbyBiZSBgYW55YCxcbiAgICogYnV0IGl0IHNob3VsZCBiZSBcIm51bWJlci1saWtlXCIgKGUuZy4sICcxMjM0JylcbiAgICogQHJldHVybnMgQSBmb3JtYXR0ZWQgc3RyaW5nIChlLmcuLCDCozEyLjM0KVxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0TW9uZXlHQlAoZmllbGRWYWx1ZTogYW55KTogc3RyaW5nIHtcbiAgICByZXR1cm4gZmllbGRWYWx1ZSA/IEZpZWxkc1V0aWxzLmN1cnJlbmN5UGlwZS50cmFuc2Zvcm0oZmllbGRWYWx1ZSAvIDEwMCwgJ0dCUCcsICdzeW1ib2wnKSA6IGZpZWxkVmFsdWU7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBnZXRMYWJlbChmaWVsZFZhbHVlOiBDYXNlRmllbGQpOiBzdHJpbmcge1xuICAgIHJldHVybiBmaWVsZFZhbHVlID8gZmllbGRWYWx1ZS5sYWJlbCA6ICcnO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0RGF0ZShmaWVsZFZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHRyeSB7XG4gICAgICAvLyBGb3JtYXQgc3BlY2lmaWVkIGhlcmUgd2Fzbid0IHByZXZpb3VzbHkgd29ya2luZyBhbmQgbG90cyBvZiB0ZXN0cyBkZXBlbmQgb24gaXQgbm90IHdvcmtpbmdcbiAgICAgIC8vIE5vdyB0aGF0IGZvcm1hdHMgd29yayBjb3JyZWN0bHkgbWFueSB0ZXN0IHdvdWxkIGJyZWFrIC0gYW5kIHRoaXMgY291bGQgYWZmZWN0IHNlcnZpY2VzIHdoaWNoIG1heSBkZXBlbmQgb25cbiAgICAgIC8vIHRoZSBvcmdpbmFsIGJlaGF2aW91ciBvZiByZXR1cm5pbmcgZGF0ZXMgaW4gXCJkIE1NTSB5eXl5XCJcbiAgICAgIC8vIE5vdGUgLSByZXBsYWNlZCAnZCcgd2l0aCAnRCcgYXMgZGF0ZXBpcGUgdXNpbmcgbW9tZW50IHRvIGF2b2lkIHRpbWV6b25lIGRpc2NyZXBhbmNpZXNcbiAgICAgIHJldHVybiBGaWVsZHNVdGlscy5kYXRlUGlwZS50cmFuc2Zvcm0oZmllbGRWYWx1ZSwgbnVsbCwgJ0QgTU1NIHl5eXknKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gdGhpcy50ZXh0Rm9ySW52YWxpZEZpZWxkKCdEYXRlJywgZmllbGRWYWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0Rml4ZWRMaXN0TGFiZWxCeUNvZGVPckVtcHR5KGZpZWxkOiBDYXNlRmllbGQsIGNvZGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgcmVsZXZhbnRJdGVtOiBGaXhlZExpc3RJdGVtID0gY29kZSA/IGZpZWxkLmZpZWxkX3R5cGUuZml4ZWRfbGlzdF9pdGVtcy5maW5kKGl0ZW0gPT4gaXRlbS5jb2RlID09PSBjb2RlKSA6IG51bGw7XG4gICAgcmV0dXJuIHJlbGV2YW50SXRlbSA/IHJlbGV2YW50SXRlbS5sYWJlbCA6ICcnO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgdGV4dEZvckludmFsaWRGaWVsZCh0eXBlOiBzdHJpbmcsIGludmFsaWRWYWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYHsgSW52YWxpZCAke3R5cGV9OiAke2ludmFsaWRWYWx1ZX0gfWA7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBzZXREeW5hbWljTGlzdERlZmluaXRpb24oY2FzZUZpZWxkOiBDYXNlRmllbGQsIGNhc2VGaWVsZFR5cGU6IEZpZWxkVHlwZSwgcm9vdENhc2VGaWVsZDogQ2FzZUZpZWxkKSB7XG4gICAgaWYgKGNhc2VGaWVsZFR5cGUudHlwZSA9PT0gRmllbGRzVXRpbHMuU0VSVkVSX1JFU1BPTlNFX0ZJRUxEX1RZUEVfQ09NUExFWCkge1xuXG4gICAgICBjYXNlRmllbGRUeXBlLmNvbXBsZXhfZmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGlzRHluYW1pY0ZpZWxkID0gRmllbGRzVXRpbHMuU0VSVkVSX1JFU1BPTlNFX0ZJRUxEX1RZUEVfRFlOQU1JQ19MSVNUX1RZUEUuaW5kZXhPZihmaWVsZC5maWVsZF90eXBlLnR5cGUpICE9PSAtMTtcblxuICAgICAgICAgIGlmIChpc0R5bmFtaWNGaWVsZCkge1xuICAgICAgICAgICAgY29uc3QgZHluYW1pY0xpc3RWYWx1ZSA9IHRoaXMuZ2V0RHluYW1pY0xpc3RWYWx1ZShyb290Q2FzZUZpZWxkLnZhbHVlLCBmaWVsZC5pZCk7XG4gICAgICAgICAgICBpZiAoZHluYW1pY0xpc3RWYWx1ZSkge1xuICAgICAgICAgICAgICBjb25zdCBsaXN0X2l0ZW1zID0gZHluYW1pY0xpc3RWYWx1ZVswXS5saXN0X2l0ZW1zO1xuICAgICAgICAgICAgICBjb25zdCBjb21wbGV4VmFsdWUgPSBkeW5hbWljTGlzdFZhbHVlLm1hcChkYXRhID0+IGRhdGEudmFsdWUpO1xuICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHtcbiAgICAgICAgICAgICAgICBsaXN0X2l0ZW1zLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBjb21wbGV4VmFsdWUubGVuZ3RoID4gMCA/IGNvbXBsZXhWYWx1ZSA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICBmaWVsZC52YWx1ZSA9IHtcbiAgICAgICAgICAgICAgICAuLi52YWx1ZVxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICBmaWVsZC5mb3JtYXR0ZWRfdmFsdWUgPSB7XG4gICAgICAgICAgICAgICAgLi4uZmllbGQuZm9ybWF0dGVkX3ZhbHVlLFxuICAgICAgICAgICAgICAgIC4uLnZhbHVlXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0RHluYW1pY0xpc3REZWZpbml0aW9uKGZpZWxkLCBmaWVsZC5maWVsZF90eXBlLCByb290Q2FzZUZpZWxkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKGNhc2VGaWVsZFR5cGUudHlwZSA9PT0gRmllbGRzVXRpbHMuU0VSVkVSX1JFU1BPTlNFX0ZJRUxEX1RZUEVfQ09MTEVDVElPTikge1xuICAgICAgaWYgKGNhc2VGaWVsZFR5cGUuY29sbGVjdGlvbl9maWVsZF90eXBlKSB7XG4gICAgICAgIHRoaXMuc2V0RHluYW1pY0xpc3REZWZpbml0aW9uKGNhc2VGaWVsZCwgY2FzZUZpZWxkVHlwZS5jb2xsZWN0aW9uX2ZpZWxkX3R5cGUsIHJvb3RDYXNlRmllbGQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGdldER5bmFtaWNMaXN0VmFsdWUoanNvbkJsb2NrOiBhbnksIGtleTogc3RyaW5nKSB7XG5cbiAgICBjb25zdCBkYXRhID0ganNvbkJsb2NrID8gdGhpcy5nZXROZXN0ZWRGaWVsZFZhbHVlcyhqc29uQmxvY2ssIGtleSwgW10pIDogW107XG5cbiAgICByZXR1cm4gZGF0YS5sZW5ndGggPiAwID8gZGF0YSA6IG51bGw7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBnZXROZXN0ZWRGaWVsZFZhbHVlcyhqc29uRGF0YTogYW55LCBrZXk6IHN0cmluZywgb3V0cHV0OiBhbnlbXSA9IFtdKSB7XG4gICAgaWYgKGpzb25EYXRhICYmIGpzb25EYXRhW2tleV0pIHtcbiAgICAgIG91dHB1dC5wdXNoKGpzb25EYXRhW2tleV0pO1xuICAgIH0gZWxzZSAge1xuICAgICAgZm9yIChjb25zdCBlbGVtZW50S2V5IGluIGpzb25EYXRhKSB7XG4gICAgICAgIGlmICh0eXBlb2YganNvbkRhdGEgPT09ICdvYmplY3QnICYmIGpzb25EYXRhLmhhc093blByb3BlcnR5KGVsZW1lbnRLZXkpKSB7XG4gICAgICAgICAgdGhpcy5nZXROZXN0ZWRGaWVsZFZhbHVlcyhqc29uRGF0YVtlbGVtZW50S2V5XSwga2V5LCBvdXRwdXQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXQ7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGlzRmxhZ3NDYXNlRmllbGQoY2FzZUZpZWxkOiBDYXNlRmllbGQpOiBib29sZWFuIHtcbiAgICBpZiAoIWNhc2VGaWVsZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmlzRmxhZ3NGaWVsZFR5cGUoY2FzZUZpZWxkLmZpZWxkX3R5cGUpO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBpc0ZsYWdMYXVuY2hlckNhc2VGaWVsZChjYXNlRmllbGQ6IENhc2VGaWVsZCk6IGJvb2xlYW4ge1xuICAgIGlmICghY2FzZUZpZWxkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNhc2VGaWVsZC5maWVsZF90eXBlLnR5cGUgPT09ICdGbGFnTGF1bmNoZXInO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBpc0ZsYWdzRmllbGRUeXBlKGZpZWxkVHlwZTogRmllbGRUeXBlKTogYm9vbGVhbiB7XG4gICAgaWYgKCFmaWVsZFR5cGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBOb3RlOiBUaGlzIGltcGxlbWVudGF0aW9uIHN1cHBvcnRzIHRoZSBkdW1teSBmaWVsZCB0eXBlIElEIG9mIFwiQ2FzZUZsYWdcIiBmb3IgdGVzdGluZyBhbmQgdGhlIHJlYWwgZmllbGQgdHlwZVxuICAgIC8vIElEIG9mIFwiRmxhZ3NcIlxuICAgIHJldHVybiAoZmllbGRUeXBlLnR5cGUgPT09ICdDb21wbGV4JyAmJiAoZmllbGRUeXBlLmlkID09PSAnQ2FzZUZsYWcnIHx8IGZpZWxkVHlwZS5pZCA9PT0gJ0ZsYWdzJykpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4dHJhY3QgZmxhZ3MgZGF0YSBmcm9tIGEgYENhc2VGaWVsZGAgaW5zdGFuY2UsIHJlY3Vyc2luZyBhbmQgaXRlcmF0aW5nIHRocm91Z2ggc3ViLWZpZWxkcyBvZiBhIENvbXBsZXggZmllbGQgb3JcbiAgICogZWFjaCBmaWVsZCBpbiBhIENvbGxlY3Rpb24gZmllbGQuXG4gICAqXG4gICAqIEBwYXJhbSBmbGFncyBBbiBhcnJheSBmb3IgYWNjdW11bGF0aW5nIGV4dHJhY3RlZCBmbGFncyBkYXRhIGFuZCBkZXJpdmVkIGBGb3JtR3JvdXBgIHBhdGhzXG4gICAqIEBwYXJhbSBjYXNlRmllbGQgQSBgQ2FzZUZpZWxkYCBpbnN0YW5jZSBmcm9tIHdoaWNoIHRvIGV4dHJhY3QgdGhlIGZsYWdzIGRhdGFcbiAgICogQHBhcmFtIHBhdGhUb0ZsYWdzRm9ybUdyb3VwIEEgKGRvdC1kZWxpbWl0ZWQpIHN0cmluZyBmb3IgY29uY2F0ZW5hdGluZyB0aGUgbmFtZSBvZiBlYWNoIGNvbnRyb2wgdGhhdCBmb3JtcyB0aGUgcGF0aFxuICAgKiB0byB0aGUgYEZvcm1Hcm91cGAgZm9yIHRoZSBgRmxhZ3NgIGluc3RhbmNlXG4gICAqIEBwYXJhbSB0b3BMZXZlbENhc2VGaWVsZCBUaGUgdG9wLWxldmVsIGBDYXNlRmllbGRgIHRoYXQgY29udGFpbnMgdGhlIHZhbHVlIHByb3BlcnR5LiBUaGlzIGlzIHJlcXVpcmVkIGJlY2F1c2UgX29ubHlcbiAgICogdG9wLWxldmVsXyBgQ2FzZUZpZWxkYHMgY29udGFpbiBhY3R1YWwgdmFsdWVzIGFuZCBhIHJlZmVyZW5jZSBuZWVkcyB0byBiZSBtYWludGFpbmVkIHRvIHN1Y2ggYSBmaWVsZFxuICAgKiBAcGFyYW0gY3VycmVudFZhbHVlIFRoZSBjdXJyZW50IHZhbHVlIG9iamVjdCBvZiBhIGBDYXNlRmllbGRgIHRoYXQgaXMgYSBzdWItZmllbGQgb2YgYSBub24gcm9vdC1sZXZlbCBDb21wbGV4IGZpZWxkLlxuICAgKiBSZXF1aXJlZCBmb3IgbWFwcGluZyB0aGUgYENhc2VGaWVsZGAgdmFsdWUgdG8gYSBgRmxhZ3NgIG9iamVjdCBpZiBpdCBpcyBhIFwiRmxhZ3NcIiBgQ2FzZUZpZWxkYC4gKEZvciBDb21wbGV4IHR5cGVzLFxuICAgKiBvbmx5IHRoZSBfcm9vdC1sZXZlbF8gYENhc2VGaWVsZGAgY29udGFpbnMgYSB2YWx1ZSBwcm9wZXJ0eSAtIGFsbCBzdWItZmllbGRzLCBpbmNsdWRpbmcgYW55IG5lc3RlZCBDb21wbGV4IGZpZWxkcyxcbiAgICogZG8gKm5vdCogY29udGFpbiBhbnkgdmFsdWVzIHRoZW1zZWx2ZXMuKVxuICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBgRmxhZ3NXaXRoRm9ybUdyb3VwUGF0aGAsIGVhY2ggaW5zdGFuY2UgY29tcHJpc2luZyBhIGBGbGFnc2Agb2JqZWN0IGRlcml2ZWQgZnJvbSBhIGBDYXNlRmllbGRgXG4gICAqIG9mIHR5cGUgXCJGbGFnc1wiLCBhbmQgdGhlIGRvdC1kZWxpbWl0ZWQgcGF0aCBzdHJpbmcgdG8gdGhlIGNvcnJlc3BvbmRpbmcgYEZvcm1Hcm91cGBcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZXh0cmFjdEZsYWdzRGF0YUZyb21DYXNlRmllbGQoZmxhZ3M6IEZsYWdzV2l0aEZvcm1Hcm91cFBhdGhbXSwgY2FzZUZpZWxkOiBDYXNlRmllbGQsXG4gICAgcGF0aFRvRmxhZ3NGb3JtR3JvdXA6IHN0cmluZywgdG9wTGV2ZWxDYXNlRmllbGQ6IENhc2VGaWVsZCwgY3VycmVudFZhbHVlPzogb2JqZWN0KTogRmxhZ3NXaXRoRm9ybUdyb3VwUGF0aFtdIHtcbiAgICAgIGNvbnN0IGZpZWxkVHlwZSA9IGNhc2VGaWVsZC5maWVsZF90eXBlO1xuICAgICAgc3dpdGNoIChmaWVsZFR5cGUudHlwZSkge1xuICAgICAgICBjYXNlICdDb21wbGV4JzpcbiAgICAgICAgICAvLyBJZiB0aGUgZmllbGQgaXMgYSBGbGFncyBDYXNlRmllbGQgKHRoZXNlIGFyZSBpbXBsZW1lbnRlZCBhcyBDb21wbGV4IHR5cGVzKSwgaXQgY2FuIGJlIG1hcHBlZCB0byBhIEZsYWdzXG4gICAgICAgICAgLy8gb2JqZWN0IGltbWVkaWF0ZWx5XG4gICAgICAgICAgaWYgKEZpZWxkc1V0aWxzLmlzRmxhZ3NDYXNlRmllbGQoY2FzZUZpZWxkKSkge1xuICAgICAgICAgICAgLy8gSWYgdGhlIEZsYWdzIENhc2VGaWVsZCBoYXMgYSB2YWx1ZSwgaXQgaXMgYSByb290LWxldmVsIENvbXBsZXggZmllbGQ7IGlmIGl0IGRvZXMgbm90LCBpdCBpcyBhIEZsYWdzXG4gICAgICAgICAgICAvLyBDYXNlRmllbGQgdGhhdCBpcyBhIHN1Yi1maWVsZCB3aXRoaW4gYW5vdGhlciBDb21wbGV4IGZpZWxkLCBzbyB1c2UgdGhlIGN1cnJlbnRWYWx1ZSB2YWx1ZSAoaWYgYW55KVxuICAgICAgICAgICAgLy8gaW5zdGVhZC4gVGhlIGV4Y2VwdGlvbiB0byB0aGlzIGlzIHRoZSBcImNhc2VGbGFnc1wiIEZsYWdzIENhc2VGaWVsZCwgd2hpY2ggd2lsbCBoYXZlIGFuIGVtcHR5IG9iamVjdCB2YWx1ZVxuICAgICAgICAgICAgLy8gaW5pdGlhbGx5LCBiZWNhdXNlIG5vIHBhcnR5IG5hbWUgaXMgcmVxdWlyZWRcbiAgICAgICAgICAgIGlmIChjYXNlRmllbGQudmFsdWUgJiYgRmllbGRzVXRpbHMuaXNOb25FbXB0eU9iamVjdChjYXNlRmllbGQudmFsdWUpIHx8XG4gICAgICAgICAgICAgIGNhc2VGaWVsZC5pZCA9PT0gdGhpcy5jYXNlTGV2ZWxDYXNlRmxhZ3NGaWVsZElkKSB7XG4gICAgICAgICAgICAgIGZsYWdzLnB1c2godGhpcy5tYXBDYXNlRmllbGRUb0ZsYWdzV2l0aEZvcm1Hcm91cFBhdGhPYmplY3QoY2FzZUZpZWxkLCBwYXRoVG9GbGFnc0Zvcm1Hcm91cCkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50VmFsdWUgJiYgRmllbGRzVXRpbHMuaXNOb25FbXB0eU9iamVjdChjdXJyZW50VmFsdWUpKSB7XG4gICAgICAgICAgICAgIHBhdGhUb0ZsYWdzRm9ybUdyb3VwICs9IGAuJHtjYXNlRmllbGQuaWR9YDtcbiAgICAgICAgICAgICAgZmxhZ3MucHVzaCh0aGlzLm1hcFZhbHVlVG9GbGFnc1dpdGhGb3JtR3JvdXBQYXRoT2JqZWN0KFxuICAgICAgICAgICAgICAgIGNhc2VGaWVsZC5pZCwgY3VycmVudFZhbHVlLCBwYXRoVG9GbGFnc0Zvcm1Hcm91cCwgdG9wTGV2ZWxDYXNlRmllbGQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKGZpZWxkVHlwZS5jb21wbGV4X2ZpZWxkcykge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBjYXNlRmllbGQudmFsdWUgPyBjYXNlRmllbGQudmFsdWUgOiBjdXJyZW50VmFsdWU7XG4gICAgICAgICAgICBpZiAodmFsdWUgJiYgRmllbGRzVXRpbHMuaXNOb25FbXB0eU9iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgZmxhZ3MgPSBmaWVsZFR5cGUuY29tcGxleF9maWVsZHMucmVkdWNlKChmbGFnc09mQ29tcGxleEZpZWxkLCBzdWJGaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmV4dHJhY3RGbGFnc0RhdGFGcm9tQ2FzZUZpZWxkKFxuICAgICAgICAgICAgICAgICAgZmxhZ3NPZkNvbXBsZXhGaWVsZCwgc3ViRmllbGQsIHBhdGhUb0ZsYWdzRm9ybUdyb3VwLCB0b3BMZXZlbENhc2VGaWVsZCwgdmFsdWVbc3ViRmllbGQuaWRdKTtcbiAgICAgICAgICAgICAgfSwgZmxhZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgLy8gRm9yIGEgQ29sbGVjdGlvbiBmaWVsZCwgdGhlIHZhbHVlcyBhcmUgc3RvcmVkIGRpcmVjdGx5IGFzIGtleS12YWx1ZSBwYWlycyBpbiB0aGUgQ2FzZUZpZWxkJ3MgdmFsdWUgcHJvcGVydHlcbiAgICAgICAgLy8gYXMgYW4gYXJyYXksIHVubGVzcyB0aGUgY29sbGVjdGlvbiBpcyBhIHN1Yi1maWVsZCBvZiBhIENvbXBsZXggdHlwZSAtIHN1Yi1maWVsZHMgbmV2ZXIgY29udGFpbiB2YWx1ZXNcbiAgICAgICAgY2FzZSAnQ29sbGVjdGlvbic6XG4gICAgICAgICAgLy8gSWYgdGhpcyBpcyBhIGNvbGxlY3Rpb24gb2YgRmxhZ3MgQ2FzZUZpZWxkcywgdGhlc2UgY2FuIGJlIG1hcHBlZCB0byBGbGFncyBvYmplY3RzIGltbWVkaWF0ZWx5XG4gICAgICAgICAgaWYgKEZpZWxkc1V0aWxzLmlzRmxhZ3NGaWVsZFR5cGUoZmllbGRUeXBlLmNvbGxlY3Rpb25fZmllbGRfdHlwZSkpIHtcbiAgICAgICAgICAgIC8vIElmIHRoZSBDb2xsZWN0aW9uIENhc2VGaWVsZCBoYXMgYSB2YWx1ZSAoYW4gYXJyYXkpLCBpdCBpcyBhIHJvb3QtbGV2ZWwgQ29sbGVjdGlvbiBmaWVsZDsgaWYgaXQgZG9lcyBub3QsXG4gICAgICAgICAgICAvLyBpdCBpcyBhIENvbGxlY3Rpb24gQ2FzZUZpZWxkIHRoYXQgaXMgYSBzdWItZmllbGQgd2l0aGluIGEgQ29tcGxleCBmaWVsZCwgc28gdXNlIHRoZSBjdXJyZW50VmFsdWUgdmFsdWVcbiAgICAgICAgICAgIC8vIChpZiBhbnkpIGluc3RlYWRcbiAgICAgICAgICAgIGNvbnN0IHBhdGhGcmFnbWVudCA9IHBhdGhUb0ZsYWdzRm9ybUdyb3VwICs9ICcuaW5kZXgudmFsdWUnO1xuICAgICAgICAgICAgaWYgKGNhc2VGaWVsZC52YWx1ZSkge1xuICAgICAgICAgICAgICBjYXNlRmllbGQudmFsdWUuZm9yRWFjaCgoaXRlbTogeyBpZDogc3RyaW5nOyB2YWx1ZTogb2JqZWN0OyB9LCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gQXQgZWFjaCBpdGVyYXRpb24sIHJlcGxhY2UgdGhlIFwiaW5kZXhcIiBwbGFjZWhvbGRlciB3aXRoIHRoZSBhY3R1YWwgaW5kZXhcbiAgICAgICAgICAgICAgICBwYXRoVG9GbGFnc0Zvcm1Hcm91cCA9IHBhdGhGcmFnbWVudC5yZXBsYWNlKCdpbmRleCcsIGluZGV4LnRvU3RyaW5nKDEwKSk7XG4gICAgICAgICAgICAgICAgZmxhZ3MucHVzaChcbiAgICAgICAgICAgICAgICAgIHRoaXMubWFwVmFsdWVUb0ZsYWdzV2l0aEZvcm1Hcm91cFBhdGhPYmplY3QoaXRlbS5pZCwgaXRlbS52YWx1ZSwgcGF0aFRvRmxhZ3NGb3JtR3JvdXAsIGNhc2VGaWVsZCkpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY3VycmVudFZhbHVlKSB7XG4gICAgICAgICAgICAgIChjdXJyZW50VmFsdWUgYXMgW10pLmZvckVhY2goKGl0ZW06IHsgaWQ6IHN0cmluZzsgdmFsdWU6IG9iamVjdDsgfSwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgIHBhdGhUb0ZsYWdzRm9ybUdyb3VwID0gcGF0aEZyYWdtZW50LnJlcGxhY2UoJ2luZGV4JywgaW5kZXgudG9TdHJpbmcoMTApKTtcbiAgICAgICAgICAgICAgICBmbGFncy5wdXNoKFxuICAgICAgICAgICAgICAgICAgdGhpcy5tYXBWYWx1ZVRvRmxhZ3NXaXRoRm9ybUdyb3VwUGF0aE9iamVjdChpdGVtLmlkLCBpdGVtLnZhbHVlLCBwYXRoVG9GbGFnc0Zvcm1Hcm91cCwgdG9wTGV2ZWxDYXNlRmllbGQpKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChmaWVsZFR5cGUuY29sbGVjdGlvbl9maWVsZF90eXBlLnR5cGUgPT09ICdDb21wbGV4JyAmJiBmaWVsZFR5cGUuY29sbGVjdGlvbl9maWVsZF90eXBlLmNvbXBsZXhfZmllbGRzKSB7XG4gICAgICAgICAgICBpZiAoY2FzZUZpZWxkLnZhbHVlKSB7XG4gICAgICAgICAgICAgIC8vIFBlcmZvcm0gYSByZWR1Y3Rpb24gb3ZlciBlYWNoIENvbXBsZXggZmllbGQncyBzdWItZmllbGRzIChzaW1pbGFyIHRvIHdoYXQgaXMgZG9uZSBhYm92ZSBmb3Igbm9uLUZsYWdzXG4gICAgICAgICAgICAgIC8vIENvbXBsZXggZmllbGRzKVxuICAgICAgICAgICAgICAvLyAoQ2Fubm90IGp1c3QgY2FsbCB0aGlzIGZ1bmN0aW9uIHJlY3Vyc2l2ZWx5IGZvciBlYWNoIENvbXBsZXggZmllbGQgaW4gdGhlIGNvbGxlY3Rpb24gYmVjYXVzZSB0aGUgQ2FzZUZpZWxkXG4gICAgICAgICAgICAgIC8vIGZvciBlYWNoIG9uZSBpcyBub3QgcGFydCBvZiB0aGUgY29sbGVjdGlvbilcbiAgICAgICAgICAgICAgY29uc3QgcGF0aEZyYWdtZW50ID0gcGF0aFRvRmxhZ3NGb3JtR3JvdXAgKz0gJy5pbmRleC52YWx1ZSc7XG4gICAgICAgICAgICAgIGNhc2VGaWVsZC52YWx1ZS5mb3JFYWNoKChpdGVtOiB7IGlkOiBzdHJpbmc7IHZhbHVlOiBvYmplY3Q7IH0sIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBBdCBlYWNoIGl0ZXJhdGlvbiwgcmVwbGFjZSB0aGUgXCJpbmRleFwiIHBsYWNlaG9sZGVyIHdpdGggdGhlIGFjdHVhbCBpbmRleFxuICAgICAgICAgICAgICAgIHBhdGhUb0ZsYWdzRm9ybUdyb3VwID0gcGF0aEZyYWdtZW50LnJlcGxhY2UoJ2luZGV4JywgaW5kZXgudG9TdHJpbmcoMTApKTtcbiAgICAgICAgICAgICAgICBmbGFncyA9IGZpZWxkVHlwZS5jb2xsZWN0aW9uX2ZpZWxkX3R5cGUuY29tcGxleF9maWVsZHMucmVkdWNlKChmbGFnc09mQ29tcGxleEZpZWxkLCBzdWJGaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXh0cmFjdEZsYWdzRGF0YUZyb21DYXNlRmllbGQoXG4gICAgICAgICAgICAgICAgICAgIGZsYWdzT2ZDb21wbGV4RmllbGQsIHN1YkZpZWxkLCBwYXRoVG9GbGFnc0Zvcm1Hcm91cCwgdG9wTGV2ZWxDYXNlRmllbGQsIGl0ZW0udmFsdWVbc3ViRmllbGQuaWRdKTtcbiAgICAgICAgICAgICAgICB9LCBmbGFncyk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAvLyBJZ25vcmUgYWxsIG90aGVyIGZpZWxkIHR5cGVzXG4gICAgICB9XG4gICAgICByZXR1cm4gZmxhZ3M7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBtYXBDYXNlRmllbGRUb0ZsYWdzV2l0aEZvcm1Hcm91cFBhdGhPYmplY3QoY2FzZUZpZWxkOiBDYXNlRmllbGQsXG4gICAgcGF0aFRvRmxhZ3NGb3JtR3JvdXA6IHN0cmluZyk6IEZsYWdzV2l0aEZvcm1Hcm91cFBhdGgge1xuICAgICAgcmV0dXJuIHRoaXMubWFwVmFsdWVUb0ZsYWdzV2l0aEZvcm1Hcm91cFBhdGhPYmplY3QoY2FzZUZpZWxkLmlkLCBjYXNlRmllbGQudmFsdWUsIHBhdGhUb0ZsYWdzRm9ybUdyb3VwLCBjYXNlRmllbGQpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgbWFwVmFsdWVUb0ZsYWdzV2l0aEZvcm1Hcm91cFBhdGhPYmplY3QoaWQ6IHN0cmluZywgdmFsdWU6IG9iamVjdCxcbiAgICBwYXRoVG9GbGFnc0Zvcm1Hcm91cDogc3RyaW5nLCBjYXNlRmllbGQ6IENhc2VGaWVsZCk6IEZsYWdzV2l0aEZvcm1Hcm91cFBhdGgge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZmxhZ3M6IHtcbiAgICAgICAgICBmbGFnc0Nhc2VGaWVsZElkOiBpZCxcbiAgICAgICAgICBwYXJ0eU5hbWU6IHZhbHVlID8gdmFsdWVbJ3BhcnR5TmFtZSddIDogbnVsbCxcbiAgICAgICAgICByb2xlT25DYXNlOiB2YWx1ZSA/IHZhbHVlWydyb2xlT25DYXNlJ10gOiBudWxsLFxuICAgICAgICAgIGRldGFpbHM6IHZhbHVlICYmIHZhbHVlWydkZXRhaWxzJ10gJiYgdmFsdWVbJ2RldGFpbHMnXS5sZW5ndGggPiAwXG4gICAgICAgICAgICA/ICh2YWx1ZVsnZGV0YWlscyddIGFzIGFueVtdKS5tYXAoZGV0YWlsID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIC4uLk9iamVjdC5rZXlzKGRldGFpbC52YWx1ZSkubWFwKGsgPT4ge1xuICAgICAgICAgICAgICAgIC8vIFRoZSBpZCBwcm9wZXJ0eSBzZXQgYmVsb3cgd2lsbCBiZSBudWxsIGZvciBhIG5ldyBjYXNlIGZsYWcsIGFuZCBhIHVuaXF1ZSBpZCByZXR1cm5lZCBmcm9tIENDRCB3aGVuXG4gICAgICAgICAgICAgICAgLy8gdXBkYXRpbmcgYW4gZXhpc3RpbmcgZmxhZ1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoaykge1xuICAgICAgICAgICAgICAgICAgLy8gVGhlc2UgdHdvIGZpZWxkcyBhcmUgZGF0ZS10aW1lIGZpZWxkc1xuICAgICAgICAgICAgICAgICAgY2FzZSAnZGF0ZVRpbWVNb2RpZmllZCc6XG4gICAgICAgICAgICAgICAgICBjYXNlICdkYXRlVGltZUNyZWF0ZWQnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1trXTogZGV0YWlsLnZhbHVlW2tdID8gbmV3IERhdGUoZGV0YWlsLnZhbHVlW2tdKSA6IG51bGwsIGlkOiBkZXRhaWwuaWR9O1xuICAgICAgICAgICAgICAgICAgLy8gVGhpcyBmaWVsZCBpcyBhIFwieWVzL25vXCIgZmllbGRcbiAgICAgICAgICAgICAgICAgIGNhc2UgJ2hlYXJpbmdSZWxldmFudCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkZXRhaWwudmFsdWVba10udG9VcHBlckNhc2UoKSA9PT0gJ1lFUycgPyB7W2tdOiB0cnVlLCBpZDogZGV0YWlsLmlkfSA6IHtba106IGZhbHNlLCBpZDogZGV0YWlsLmlkfTtcbiAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7W2tdOiBkZXRhaWwudmFsdWVba10sIGlkOiBkZXRhaWwuaWR9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfSkgYXMgRmxhZ0RldGFpbFtdXG4gICAgICAgICAgICA6IG51bGxcbiAgICAgICAgfSxcbiAgICAgICAgcGF0aFRvRmxhZ3NGb3JtR3JvdXAsXG4gICAgICAgIGNhc2VGaWVsZFxuICAgICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb3VudCBhY3RpdmUgZmxhZ3MgaW4gYSBgQ2FzZUZpZWxkYCBpbnN0YW5jZSwgcmVjdXJzaW5nIGFuZCBpdGVyYXRpbmcgdGhyb3VnaCBzdWItZmllbGRzIG9mIGEgQ29tcGxleCBmaWVsZCBvciBlYWNoXG4gICAqIGZpZWxkIGluIGEgQ29sbGVjdGlvbiBmaWVsZC5cbiAgICpcbiAgICogQHBhcmFtIGFjdGl2ZUNvdW50IEFuIGFjY3VtdWxhdGlvbiBvZiB0aGUgdG90YWwgbnVtYmVyIG9mIGFjdGl2ZSBmbGFnc1xuICAgKiBAcGFyYW0gY2FzZUZpZWxkIEEgYENhc2VGaWVsZGAgaW5zdGFuY2UgZm9yIHdoaWNoIHRvIGNvdW50IHRoZSBhY3RpdmUgZmxhZ3NcbiAgICogQHBhcmFtIGN1cnJlbnRWYWx1ZSBUaGUgY3VycmVudCB2YWx1ZSBvYmplY3Qgb2YgYSBgQ2FzZUZpZWxkYCB0aGF0IGlzIGEgc3ViLWZpZWxkIG9mIGEgbm9uIHJvb3QtbGV2ZWwgQ29tcGxleCBmaWVsZC5cbiAgICogKEZvciBDb21wbGV4IHR5cGVzLCBvbmx5IHRoZSBfcm9vdC1sZXZlbF8gYENhc2VGaWVsZGAgY29udGFpbnMgYSB2YWx1ZSBwcm9wZXJ0eSAtIGFsbCBzdWItZmllbGRzLCBpbmNsdWRpbmcgYW55XG4gICAqIG5lc3RlZCBDb21wbGV4IGZpZWxkcywgZG8gKm5vdCogY29udGFpbiBhbnkgdmFsdWVzIHRoZW1zZWx2ZXMuKVxuICAgKiBAcmV0dXJucyBUaGUgY291bnQgb2YgYWN0aXZlIGZsYWdzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNvdW50QWN0aXZlRmxhZ3NJbkNhc2VGaWVsZChhY3RpdmVDb3VudDogbnVtYmVyLCBjYXNlRmllbGQ6IENhc2VGaWVsZCwgY3VycmVudFZhbHVlPzogb2JqZWN0KTogbnVtYmVyIHtcbiAgICAgIGNvbnN0IGZpZWxkVHlwZSA9IGNhc2VGaWVsZC5maWVsZF90eXBlO1xuICAgICAgc3dpdGNoIChmaWVsZFR5cGUudHlwZSkge1xuICAgICAgICBjYXNlICdDb21wbGV4JzpcbiAgICAgICAgICBpZiAoRmllbGRzVXRpbHMuaXNGbGFnc0Nhc2VGaWVsZChjYXNlRmllbGQpKSB7XG4gICAgICAgICAgICAvLyBJZiB0aGUgRmxhZ3MgQ2FzZUZpZWxkIGhhcyBhIHZhbHVlLCBpdCBpcyBhIHJvb3QtbGV2ZWwgQ29tcGxleCBmaWVsZDsgaWYgaXQgZG9lcyBub3QsIGl0IGlzIGEgRmxhZ3NcbiAgICAgICAgICAgIC8vIENhc2VGaWVsZCB0aGF0IGlzIGEgc3ViLWZpZWxkIHdpdGhpbiBhbm90aGVyIENvbXBsZXggZmllbGQsIHNvIHVzZSB0aGUgY3VycmVudFZhbHVlIHZhbHVlIChpZiBhbnkpIGluc3RlYWRcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gY2FzZUZpZWxkLnZhbHVlID8gY2FzZUZpZWxkLnZhbHVlIDogY3VycmVudFZhbHVlO1xuICAgICAgICAgICAgaWYgKHZhbHVlICYmIEZpZWxkc1V0aWxzLmlzTm9uRW1wdHlPYmplY3QodmFsdWUpICYmIHZhbHVlLmRldGFpbHMpIHtcbiAgICAgICAgICAgICAgYWN0aXZlQ291bnQgPSB2YWx1ZS5kZXRhaWxzLnJlZHVjZShcbiAgICAgICAgICAgICAgICAoY291bnQsIGRldGFpbCkgPT4gZGV0YWlsLnZhbHVlLnN0YXR1cyA9PT0gQ2FzZUZsYWdTdGF0dXMuQUNUSVZFID8gY291bnQgKyAxIDogY291bnQsXG4gICAgICAgICAgICAgICAgYWN0aXZlQ291bnRcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKGZpZWxkVHlwZS5jb21wbGV4X2ZpZWxkcykge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBjYXNlRmllbGQudmFsdWUgPyBjYXNlRmllbGQudmFsdWUgOiBjdXJyZW50VmFsdWU7XG4gICAgICAgICAgICBpZiAodmFsdWUgJiYgRmllbGRzVXRpbHMuaXNOb25FbXB0eU9iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgYWN0aXZlQ291bnQgPSBmaWVsZFR5cGUuY29tcGxleF9maWVsZHMucmVkdWNlKChhY3RpdmVGbGFnc0NvdW50T2ZDb21wbGV4RmllbGQsIHN1YkZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY291bnRBY3RpdmVGbGFnc0luQ2FzZUZpZWxkKFxuICAgICAgICAgICAgICAgICAgYWN0aXZlRmxhZ3NDb3VudE9mQ29tcGxleEZpZWxkLFxuICAgICAgICAgICAgICAgICAgc3ViRmllbGQsXG4gICAgICAgICAgICAgICAgICB2YWx1ZVtzdWJGaWVsZC5pZF1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9LCBhY3RpdmVDb3VudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICAvLyBGb3IgYSBDb2xsZWN0aW9uIGZpZWxkLCB0aGUgdmFsdWVzIGFyZSBzdG9yZWQgZGlyZWN0bHkgYXMga2V5LXZhbHVlIHBhaXJzIGluIHRoZSBDYXNlRmllbGQncyB2YWx1ZSBwcm9wZXJ0eVxuICAgICAgICAvLyBhcyBhbiBhcnJheSwgdW5sZXNzIHRoZSBjb2xsZWN0aW9uIGlzIGEgc3ViLWZpZWxkIG9mIGEgQ29tcGxleCB0eXBlIC0gc3ViLWZpZWxkcyBuZXZlciBjb250YWluIHZhbHVlc1xuICAgICAgICBjYXNlICdDb2xsZWN0aW9uJzpcbiAgICAgICAgICBpZiAoRmllbGRzVXRpbHMuaXNGbGFnc0ZpZWxkVHlwZShmaWVsZFR5cGUuY29sbGVjdGlvbl9maWVsZF90eXBlKSkge1xuICAgICAgICAgICAgLy8gSWYgdGhlIENvbGxlY3Rpb24gQ2FzZUZpZWxkIGhhcyBhIHZhbHVlIChhbiBhcnJheSksIGl0IGlzIGEgcm9vdC1sZXZlbCBDb2xsZWN0aW9uIGZpZWxkOyBpZiBpdCBkb2VzIG5vdCxcbiAgICAgICAgICAgIC8vIGl0IGlzIGEgQ29sbGVjdGlvbiBDYXNlRmllbGQgdGhhdCBpcyBhIHN1Yi1maWVsZCB3aXRoaW4gYSBDb21wbGV4IGZpZWxkLCBzbyB1c2UgdGhlIGN1cnJlbnRWYWx1ZSB2YWx1ZVxuICAgICAgICAgICAgLy8gKGlmIGFueSkgaW5zdGVhZFxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBjYXNlRmllbGQudmFsdWUgPyBjYXNlRmllbGQudmFsdWUgOiBjdXJyZW50VmFsdWU7XG4gICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgdmFsdWUuZm9yRWFjaCgoaXRlbTogeyBpZDogc3RyaW5nOyB2YWx1ZTogb2JqZWN0OyB9KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0udmFsdWVbJ2RldGFpbHMnXSkge1xuICAgICAgICAgICAgICAgICAgYWN0aXZlQ291bnQgPSBpdGVtLnZhbHVlWydkZXRhaWxzJ10ucmVkdWNlKFxuICAgICAgICAgICAgICAgICAgICAoY291bnQsIGRldGFpbCkgPT4gZGV0YWlsLnZhbHVlLnN0YXR1cyA9PT0gQ2FzZUZsYWdTdGF0dXMuQUNUSVZFID8gY291bnQgKyAxIDogY291bnQsXG4gICAgICAgICAgICAgICAgICAgIGFjdGl2ZUNvdW50XG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChmaWVsZFR5cGUuY29sbGVjdGlvbl9maWVsZF90eXBlLnR5cGUgPT09ICdDb21wbGV4JyAmJiBmaWVsZFR5cGUuY29sbGVjdGlvbl9maWVsZF90eXBlLmNvbXBsZXhfZmllbGRzKSB7XG4gICAgICAgICAgICBpZiAoY2FzZUZpZWxkLnZhbHVlKSB7XG4gICAgICAgICAgICAgIC8vIFBlcmZvcm0gYSByZWR1Y3Rpb24gb3ZlciBlYWNoIENvbXBsZXggZmllbGQncyBzdWItZmllbGRzIChzaW1pbGFyIHRvIHdoYXQgaXMgZG9uZSBhYm92ZSBmb3Igbm9uLUZsYWdzXG4gICAgICAgICAgICAgIC8vIENvbXBsZXggZmllbGRzKVxuICAgICAgICAgICAgICAvLyAoQ2Fubm90IGp1c3QgY2FsbCB0aGlzIGZ1bmN0aW9uIHJlY3Vyc2l2ZWx5IGZvciBlYWNoIENvbXBsZXggZmllbGQgaW4gdGhlIGNvbGxlY3Rpb24gYmVjYXVzZSB0aGUgQ2FzZUZpZWxkXG4gICAgICAgICAgICAgIC8vIGZvciBlYWNoIG9uZSBpcyBub3QgcGFydCBvZiB0aGUgY29sbGVjdGlvbilcbiAgICAgICAgICAgICAgY2FzZUZpZWxkLnZhbHVlLmZvckVhY2goKGl0ZW06IHsgaWQ6IHN0cmluZzsgdmFsdWU6IG9iamVjdDsgfSkgPT4ge1xuICAgICAgICAgICAgICAgIGFjdGl2ZUNvdW50ID0gZmllbGRUeXBlLmNvbGxlY3Rpb25fZmllbGRfdHlwZS5jb21wbGV4X2ZpZWxkcy5yZWR1Y2UoXG4gICAgICAgICAgICAgICAgICAoYWN0aXZlRmxhZ3NDb3VudE9mQ29tcGxleEZpZWxkLCBzdWJGaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb3VudEFjdGl2ZUZsYWdzSW5DYXNlRmllbGQoYWN0aXZlRmxhZ3NDb3VudE9mQ29tcGxleEZpZWxkLCBzdWJGaWVsZCwgaXRlbS52YWx1ZVtzdWJGaWVsZC5pZF0pO1xuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIGFjdGl2ZUNvdW50XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIC8vIElnbm9yZSBhbGwgb3RoZXIgZmllbGQgdHlwZXNcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY3RpdmVDb3VudDtcbiAgfVxuXG4gIHB1YmxpYyBidWlsZENhblNob3dQcmVkaWNhdGUoZXZlbnRUcmlnZ2VyOiBDYXNlRXZlbnRUcmlnZ2VyLCBmb3JtOiBhbnkpOiBQcmVkaWNhdGU8V2l6YXJkUGFnZT4ge1xuICAgIGNvbnN0IGN1cnJlbnRTdGF0ZSA9IHRoaXMuZ2V0Q3VycmVudEV2ZW50U3RhdGUoZXZlbnRUcmlnZ2VyLCBmb3JtKTtcbiAgICByZXR1cm4gKHBhZ2U6IFdpemFyZFBhZ2UpOiBib29sZWFuID0+IHtcbiAgICAgIHJldHVybiBwYWdlLnBhcnNlZFNob3dDb25kaXRpb24ubWF0Y2goY3VycmVudFN0YXRlKTtcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGdldEN1cnJlbnRFdmVudFN0YXRlKGV2ZW50VHJpZ2dlcjogeyBjYXNlX2ZpZWxkczogQ2FzZUZpZWxkW10gfSwgZm9ybTogRm9ybUdyb3VwKTogb2JqZWN0IHtcbiAgICByZXR1cm4gdGhpcy5tZXJnZUNhc2VGaWVsZHNBbmRGb3JtRmllbGRzKGV2ZW50VHJpZ2dlci5jYXNlX2ZpZWxkcywgZm9ybS5jb250cm9sc1snZGF0YSddLnZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBjbG9uZUNhc2VGaWVsZChvYmo6IGFueSk6IENhc2VGaWVsZCB7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24obmV3IENhc2VGaWVsZCgpLCBvYmopO1xuICB9XG5cbiAgcHVibGljIG1lcmdlQ2FzZUZpZWxkc0FuZEZvcm1GaWVsZHMoY2FzZUZpZWxkczogQ2FzZUZpZWxkW10sIGZvcm1GaWVsZHM6IG9iamVjdCk6IG9iamVjdCB7XG4gICAgcmV0dXJuIHRoaXMubWVyZ2VGaWVsZHMoY2FzZUZpZWxkcywgZm9ybUZpZWxkcywgRmllbGRzVXRpbHMuREVGQVVMVF9NRVJHRV9GVU5DVElPTik7XG4gIH1cblxuICBwdWJsaWMgbWVyZ2VMYWJlbENhc2VGaWVsZHNBbmRGb3JtRmllbGRzKGNhc2VGaWVsZHM6IENhc2VGaWVsZFtdLCBmb3JtRmllbGRzOiBvYmplY3QpOiBvYmplY3Qge1xuICAgIHJldHVybiB0aGlzLm1lcmdlRmllbGRzKGNhc2VGaWVsZHMsIGZvcm1GaWVsZHMsIEZpZWxkc1V0aWxzLkxBQkVMX01FUkdFX0ZVTkNUSU9OKTtcbiAgfVxuXG4gIHB1YmxpYyBjb250cm9sSXRlcmF0b3IoXG4gICAgYUNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCxcbiAgICBmb3JtQXJyYXlGbjogKGFycmF5OiBGb3JtQXJyYXkpID0+IHZvaWQsXG4gICAgZm9ybUdyb3VwRm46IChncm91cDogRm9ybUdyb3VwKSA9PiB2b2lkLFxuICAgIGNvbnRyb2xGbjogKGNvbnRyb2w6IEZvcm1Db250cm9sKSA9PiB2b2lkXG4gICk6IHZvaWQge1xuICAgIGlmIChhQ29udHJvbCBpbnN0YW5jZW9mIEZvcm1BcnJheSkgeyAvLyBXZSdyZSBpbiBhIGNvbGxlY3Rpb25cbiAgICAgIGZvcm1BcnJheUZuKGFDb250cm9sKTtcbiAgICB9IGVsc2UgaWYgKGFDb250cm9sIGluc3RhbmNlb2YgRm9ybUdyb3VwKSB7IC8vIFdlJ3JlIGluIGEgY29tcGxleCB0eXBlLlxuICAgICAgZm9ybUdyb3VwRm4oYUNvbnRyb2wpO1xuICAgIH0gZWxzZSBpZiAoYUNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQ29udHJvbCkgeyAvLyBGb3JtQ29udHJvbFxuICAgICAgY29udHJvbEZuKGFDb250cm9sKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1lcmdlRmllbGRzKGNhc2VGaWVsZHM6IENhc2VGaWVsZFtdLCBmb3JtRmllbGRzOiBvYmplY3QsIG1lcmdlRnVuY3Rpb246IChmaWVsZDogQ2FzZUZpZWxkLCByZXN1bHQ6IG9iamVjdCkgPT4gdm9pZCk6IG9iamVjdCB7XG4gICAgY29uc3QgcmVzdWx0OiBvYmplY3QgPSBGaWVsZHNVdGlscy5jbG9uZU9iamVjdChmb3JtRmllbGRzKTtcbiAgICBjYXNlRmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgbWVyZ2VGdW5jdGlvbihmaWVsZCwgcmVzdWx0KTtcbiAgICAgIGlmIChmaWVsZC5maWVsZF90eXBlICYmIGZpZWxkLmZpZWxkX3R5cGUuY29tcGxleF9maWVsZHMgJiYgZmllbGQuZmllbGRfdHlwZS5jb21wbGV4X2ZpZWxkcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJlc3VsdFtmaWVsZC5pZF0gPSB0aGlzLm1lcmdlRmllbGRzKGZpZWxkLmZpZWxkX3R5cGUuY29tcGxleF9maWVsZHMsIHJlc3VsdFtmaWVsZC5pZF0sIG1lcmdlRnVuY3Rpb24pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn1cbiJdfQ==
|