ngx-material-entity 18.0.0 → 18.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/custom-table/custom-table-configuration.model.d.ts +65 -0
- package/components/custom-table/custom-table.component.d.ts +111 -0
- package/components/edit-page/edit-page.component.d.ts +5 -1
- package/components/input/array/array-date-input/array-date-input.component.d.ts +2 -2
- package/components/input/array/array-date-range-input/array-date-range-input.component.d.ts +3 -3
- package/components/input/array/array-date-time-input/array-date-time-input.component.d.ts +3 -3
- package/components/input/array/array-table.class.d.ts +25 -19
- package/components/input/input.component.d.ts +99 -80
- package/components/input/relations/references-many-input/references-many-input.component.d.ts +12 -17
- package/components/table/edit-dialog/edit-entity-dialog.component.d.ts +5 -5
- package/components/table/table-data.d.ts +9 -4
- package/components/table/table.component.d.ts +15 -37
- package/decorators/array/array-decorator-internal.data.d.ts +5 -1
- package/decorators/array/array-decorator.data.d.ts +38 -82
- package/decorators/references-many/references-many-decorator-internal.data.d.ts +3 -1
- package/decorators/references-many/references-many-decorator.data.d.ts +13 -1
- package/directives/dynamic-style-class.directive.d.ts +4 -5
- package/esm2022/components/confirm-dialog/confirm-dialog.component.mjs +5 -6
- package/esm2022/components/create-page/create-page.component.mjs +6 -7
- package/esm2022/components/custom-table/custom-table-configuration.model.mjs +37 -0
- package/esm2022/components/custom-table/custom-table.component.mjs +213 -0
- package/esm2022/components/edit-page/edit-page.component.mjs +19 -9
- package/esm2022/components/form/form.component.mjs +5 -6
- package/esm2022/components/input/array/array-date-input/array-date-input.component.mjs +16 -20
- package/esm2022/components/input/array/array-date-range-input/array-date-range-input.component.mjs +27 -26
- package/esm2022/components/input/array/array-date-time-input/array-date-time-input.component.mjs +17 -21
- package/esm2022/components/input/array/array-string-autocomplete-chips/array-string-autocomplete-chips.component.mjs +4 -4
- package/esm2022/components/input/array/array-string-chips-input/array-string-chips-input.component.mjs +4 -4
- package/esm2022/components/input/array/array-table.class.mjs +51 -43
- package/esm2022/components/input/date/date-range-input/date-range-input.component.mjs +5 -6
- package/esm2022/components/input/date/date-time-input/date-time-input.component.mjs +4 -4
- package/esm2022/components/input/file/file-image-input/file-image-input.component.mjs +4 -7
- package/esm2022/components/input/file/file-input/file-input.component.mjs +4 -5
- package/esm2022/components/input/input.component.mjs +143 -106
- package/esm2022/components/input/number/number-dropdown-input/number-dropdown-input.component.mjs +4 -5
- package/esm2022/components/input/relations/references-many-input/references-many-input.component.mjs +40 -55
- package/esm2022/components/input/string/string-autocomplete-input/string-autocomplete-input.component.mjs +4 -5
- package/esm2022/components/input/string/string-dropdown-input/string-dropdown-input.component.mjs +4 -5
- package/esm2022/components/input/string/string-password-input/string-password-input.component.mjs +4 -4
- package/esm2022/components/table/create-dialog/create-entity-dialog.component.mjs +9 -8
- package/esm2022/components/table/edit-dialog/edit-entity-dialog.component.mjs +22 -14
- package/esm2022/components/table/table-data.mjs +1 -1
- package/esm2022/components/table/table.component.mjs +40 -107
- package/esm2022/components/tooltip/tooltip.component.mjs +3 -3
- package/esm2022/decorators/array/array-decorator-internal.data.mjs +14 -1
- package/esm2022/decorators/array/array-decorator.data.mjs +33 -2
- package/esm2022/decorators/has-many/has-many-decorator-internal.data.mjs +1 -1
- package/esm2022/decorators/references-many/references-many-decorator-internal.data.mjs +8 -1
- package/esm2022/decorators/references-many/references-many-decorator.data.mjs +1 -1
- package/esm2022/directives/dynamic-style-class.directive.mjs +5 -5
- package/esm2022/directives/tooltip.directive.mjs +4 -1
- package/esm2022/functions/get-changes-tooltip-content.function.mjs +23 -0
- package/esm2022/functions/get-validation-errors-tooltip-content.function.mjs +23 -0
- package/esm2022/functions/table-column-value-to-sort-value.function.mjs +29 -0
- package/esm2022/public-api.mjs +3 -2
- package/esm2022/utilities/date.utilities.mjs +7 -6
- package/esm2022/utilities/entity.utilities.mjs +23 -7
- package/esm2022/utilities/validation.utilities.mjs +2 -2
- package/fesm2022/ngx-material-entity.mjs +2550 -2224
- package/fesm2022/ngx-material-entity.mjs.map +1 -1
- package/functions/get-changes-tooltip-content.function.d.ts +13 -0
- package/functions/table-column-value-to-sort-value.function.d.ts +9 -0
- package/package.json +1 -1
- package/public-api.d.ts +2 -1
- package/utilities/entity.utilities.d.ts +7 -3
- package/esm2022/functions/get-validation-errors-tooltip-content.function.ts.mjs +0 -23
- /package/functions/{get-validation-errors-tooltip-content.function.ts.d.ts → get-validation-errors-tooltip-content.function.d.ts} +0 -0
|
@@ -154,6 +154,7 @@ export class ValidationUtilities {
|
|
|
154
154
|
case DecoratorTypes.ARRAY_DATE_TIME:
|
|
155
155
|
case DecoratorTypes.ARRAY_DATE_RANGE:
|
|
156
156
|
case DecoratorTypes.ARRAY:
|
|
157
|
+
case DecoratorTypes.REFERENCES_MANY:
|
|
157
158
|
const entityArray = entity[key];
|
|
158
159
|
// eslint-disable-next-line stylistic/max-len
|
|
159
160
|
const arrayMetadata = metadata;
|
|
@@ -182,7 +183,6 @@ export class ValidationUtilities {
|
|
|
182
183
|
const entityFile = entity[key];
|
|
183
184
|
const entityFileMetadata = metadata;
|
|
184
185
|
return this.getFileDataValidationError(entityFile, entityFileMetadata);
|
|
185
|
-
case DecoratorTypes.REFERENCES_MANY:
|
|
186
186
|
case DecoratorTypes.REFERENCES_ONE:
|
|
187
187
|
case DecoratorTypes.HAS_MANY:
|
|
188
188
|
break;
|
|
@@ -520,4 +520,4 @@ function formatDate(date) {
|
|
|
520
520
|
date.getFullYear()
|
|
521
521
|
].join('/');
|
|
522
522
|
}
|
|
523
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi51dGlsaXRpZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbWF0ZXJpYWwtZW50aXR5L3NyYy91dGlsaXRpZXMvdmFsaWRhdGlvbi51dGlsaXRpZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLGFBQWEsRUFBUSxNQUFNLGtCQUFrQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFHakQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBV3pFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQWlCdEU7O0dBRUc7QUFDSCxNQUFNLE9BQWdCLG1CQUFtQjtJQUNyQzs7Ozs7OztPQU9HO0lBQ0gsTUFBTSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQ3RCLE1BQWtCLEVBQ2xCLFFBQTZCLEVBQzdCLElBQTBCO1FBRTFCLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztJQUN2RixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsTUFBTSxDQUFDLEtBQUssQ0FBQyx5QkFBeUIsQ0FDbEMsTUFBa0IsRUFDbEIsUUFBNkIsRUFDN0IsSUFBMEI7UUFFMUIsTUFBTSxHQUFHLEdBQXNCLEVBQUUsQ0FBQztRQUNsQyxLQUFLLE1BQU0sR0FBRyxJQUFJLGVBQWUsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDekQsTUFBTSxHQUFHLEdBQWdDLE1BQU0sSUFBSSxDQUFDLDBCQUEwQixDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDbEcsSUFBSSxHQUFHLEVBQUUsQ0FBQztnQkFDTixHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2xCLENBQUM7UUFDTCxDQUFDO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDZixDQUFDO0lBRUQsTUFBTTtJQUNOLGlEQUFpRDtJQUNqRCxLQUFLO0lBQ0wsNERBQTREO0lBQzVELDRDQUE0QztJQUM1QywyRkFBMkY7SUFDM0YsMERBQTBEO0lBQzFELCtEQUErRDtJQUMvRCxNQUFNO0lBQ04seUVBQXlFO0lBQ3pFLDBCQUEwQjtJQUMxQiw2QkFBNkI7SUFDN0IsaUNBQWlDO0lBQ2pDLGVBQWU7SUFDZix5RUFBeUU7SUFDekUsSUFBSTtJQUVKOzs7Ozs7O09BT0c7SUFDSCxzREFBc0Q7SUFDdEQsTUFBTSxDQUFDLEtBQUssQ0FBQywwQkFBMEIsQ0FDbkMsTUFBa0IsRUFDbEIsR0FBcUIsRUFDckIsSUFBMEI7UUFFMUIsTUFBTSxJQUFJLEdBQStCLGVBQWUsQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3RGLElBQUksSUFBSSxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ3BCLE9BQU8sU0FBUyxDQUFDO1FBQ3JCLENBQUM7UUFDRCxNQUFNLFFBQVEsR0FBeUQsZUFBZSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFOUgsdUJBQXVCO1FBQ3ZCLElBQUksUUFBUSxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ3hCLE9BQU8sU0FBUyxDQUFDO1FBQ3JCLENBQUM7UUFFRCxJQUFJLFFBQVEsQ0FBQyxhQUFhLElBQUksSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzlDLE9BQU8sU0FBUyxDQUFDO1FBQ3JCLENBQUM7UUFDRCxJQUFJLFFBQVEsQ0FBQyxhQUFhLElBQUksSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzlDLE9BQU8sU0FBUyxDQUFDO1FBQ3JCLENBQUM7UUFDRCxJQUFJLElBQUksS0FBSyxjQUFjLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksU0FBUyxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ3BILE9BQU87Z0JBQ0gsUUFBUSxFQUFFLFFBQVEsQ0FBQyxXQUFXO2dCQUM5QixPQUFPLEVBQUUsVUFBVTthQUN0QixDQUFDO1FBQ04sQ0FBQztRQUNELElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLFNBQVMsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNqRixPQUFPLFNBQVMsQ0FBQztRQUNyQixDQUFDO1FBQ0QsUUFBUSxJQUFJLEVBQUUsQ0FBQztZQUNYLEtBQUssY0FBYyxDQUFDLGdCQUFnQjtnQkFDaEMscUZBQXFGO2dCQUNyRixPQUFPLFNBQVMsQ0FBQztZQUNyQixLQUFLLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQztZQUNyQyxLQUFLLGNBQWMsQ0FBQyxjQUFjO2dCQUM5QixNQUFNLGFBQWEsR0FBWSxNQUFNLENBQUMsR0FBRyxDQUFZLENBQUM7Z0JBQ3RELE1BQU0sZUFBZSxHQUF5QyxRQUFnRCxDQUFDO2dCQUMvRyxPQUFPLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxNQUFNLEVBQUUsYUFBYSxFQUFFLGVBQWUsQ0FBQyxDQUFDO1lBQ2xGLEtBQUssY0FBYyxDQUFDLGVBQWU7Z0JBQy9CLHFGQUFxRjtnQkFDckYsT0FBTyxTQUFTLENBQUM7WUFDckIsS0FBSyxjQUFjLENBQUMsTUFBTTtnQkFDdEIsTUFBTSxZQUFZLEdBQVcsTUFBTSxDQUFDLEdBQUcsQ0FBVyxDQUFDO2dCQUNuRCxNQUFNLGNBQWMsR0FBeUMsUUFBZ0QsQ0FBQztnQkFDOUcsT0FBTyxJQUFJLENBQUMsd0JBQXdCLENBQUMsWUFBWSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1lBQ3ZFLEtBQUssY0FBYyxDQUFDLG1CQUFtQjtnQkFDbkMsTUFBTSx3QkFBd0IsR0FBVyxNQUFNLENBQUMsR0FBRyxDQUFXLENBQUM7Z0JBQy9ELDZDQUE2QztnQkFDN0MsTUFBTSwwQkFBMEIsR0FBOEMsUUFBcUQsQ0FBQztnQkFDcEksT0FBTyxJQUFJLENBQUMsb0NBQW9DLENBQUMsTUFBTSxFQUFFLHdCQUF3QixFQUFFLDBCQUEwQixDQUFDLENBQUM7WUFDbkgsS0FBSyxjQUFjLENBQUMsY0FBYztnQkFDOUIsTUFBTSxhQUFhLEdBQVcsTUFBTSxDQUFDLEdBQUcsQ0FBVyxDQUFDO2dCQUNwRCxNQUFNLGVBQWUsR0FBeUMsUUFBZ0QsQ0FBQztnQkFDL0csT0FBTyxJQUFJLENBQUMseUJBQXlCLENBQUMsYUFBYSxFQUFFLGVBQWUsQ0FBQyxDQUFDO1lBQzFFLEtBQUssY0FBYyxDQUFDLGVBQWU7Z0JBQy9CLE1BQU0sY0FBYyxHQUFXLE1BQU0sQ0FBQyxHQUFHLENBQVcsQ0FBQztnQkFDckQsTUFBTSxnQkFBZ0IsR0FBMEMsUUFBaUQsQ0FBQztnQkFDbEgsTUFBTSxlQUFlLEdBQVcsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFXLENBQUM7Z0JBQzFILE9BQU8sSUFBSSxDQUFDLDBCQUEwQixDQUFDLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLENBQUMsQ0FBQztZQUM5RixLQUFLLGNBQWMsQ0FBQyxlQUFlO2dCQUMvQixxRkFBcUY7Z0JBQ3JGLE9BQU8sU0FBUyxDQUFDO1lBQ3JCLEtBQUssY0FBYyxDQUFDLE1BQU0sQ0FBQztZQUMzQixLQUFLLGNBQWMsQ0FBQyxhQUFhO2dCQUM3QixNQUFNLFlBQVksR0FBVyxNQUFNLENBQUMsR0FBRyxDQUFXLENBQUM7Z0JBQ25ELE1BQU0sY0FBYyxHQUF5QyxRQUFnRCxDQUFDO2dCQUM5RyxPQUFPLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxZQUFZLEVBQUUsY0FBYyxDQUFDLENBQUM7WUFDdkUsS0FBSyxjQUFjLENBQUMsTUFBTTtnQkFDdEIsTUFBTSxZQUFZLEdBQWUsTUFBTSxDQUFDLEdBQUcsQ0FBZSxDQUFDO2dCQUMzRCxLQUFLLE1BQU0sWUFBWSxJQUFJLFlBQVksRUFBRSxDQUFDO29CQUN0QyxNQUFNLEtBQUssR0FBWSxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUM7b0JBQ2xELElBQ0ksQ0FBRSxRQUE2RCxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDOzJCQUN4RixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLFNBQVMsSUFBSSxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsRUFDekUsQ0FBQzt3QkFDQyxNQUFNLEdBQUcsR0FBZ0MsTUFBTSxJQUFJLENBQUMsMEJBQTBCLENBQUMsWUFBWSxFQUFFLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQzt3QkFDakgsSUFBSSxHQUFHLEVBQUUsQ0FBQzs0QkFDTixPQUFPO2dDQUNILFFBQVEsRUFBRSxRQUFRLENBQUMsV0FBVztnQ0FDOUIsT0FBTyxFQUFFLEdBQUcsR0FBRyxDQUFDLFFBQVEsZ0JBQWdCLEdBQUcsQ0FBQyxPQUFPLEVBQUU7NkJBQ3hELENBQUM7d0JBQ04sQ0FBQztvQkFDTCxDQUFDO2dCQUNMLENBQUM7Z0JBQ0QsTUFBTTtZQUNWLEtBQUssY0FBYyxDQUFDLGVBQWU7Z0JBQy9CLHFGQUFxRjtnQkFDckYsT0FBTyxTQUFTLENBQUM7WUFDckIsS0FBSyxjQUFjLENBQUMsK0JBQStCO2dCQUMvQyxNQUFNLHVCQUF1QixHQUFhLE1BQU0sQ0FBQyxHQUFHLENBQWEsQ0FBQztnQkFDbEUsNkNBQTZDO2dCQUM3QyxNQUFNLCtCQUErQixHQUF3RCxRQUErRCxDQUFDO2dCQUM3Siw2Q0FBNkM7Z0JBQzdDLE9BQU8sTUFBTSxJQUFJLENBQUMsOENBQThDLENBQUMsTUFBTSxFQUFFLCtCQUErQixFQUFFLHVCQUF1QixDQUFDLENBQUM7WUFDdkksS0FBSyxjQUFjLENBQUMsa0JBQWtCLENBQUM7WUFDdkMsS0FBSyxjQUFjLENBQUMsVUFBVSxDQUFDO1lBQy9CLEtBQUssY0FBYyxDQUFDLGVBQWUsQ0FBQztZQUNwQyxLQUFLLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQztZQUNyQyxLQUFLLGNBQWMsQ0FBQyxLQUFLO2dCQUNyQixNQUFNLFdBQVcsR0FBYyxNQUFNLENBQUMsR0FBRyxDQUFjLENBQUM7Z0JBQ3hELDZDQUE2QztnQkFDN0MsTUFBTSxhQUFhLEdBQW1ELFFBQTBELENBQUM7Z0JBQ2pJLElBQUksYUFBYSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDeEQsT0FBTzt3QkFDSCxRQUFRLEVBQUUsUUFBUSxDQUFDLFdBQVc7d0JBQzlCLE9BQU8sRUFBRSxtQkFBbUI7cUJBQy9CLENBQUM7Z0JBQ04sQ0FBQztnQkFDRCxNQUFNO1lBQ1YsS0FBSyxjQUFjLENBQUMsSUFBSTtnQkFDcEIsTUFBTSxVQUFVLEdBQVMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBUyxDQUFDLENBQUM7Z0JBQ3ZELE1BQU0sWUFBWSxHQUF1QyxRQUE4QyxDQUFDO2dCQUN4RyxPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxVQUFVLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFDakUsS0FBSyxjQUFjLENBQUMsVUFBVTtnQkFDMUIsTUFBTSxlQUFlLEdBQWMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFjLENBQUMsQ0FBQztnQkFDdkYsTUFBTSxpQkFBaUIsR0FBeUMsUUFBZ0QsQ0FBQztnQkFDakgsT0FBTyxJQUFJLENBQUMsMkJBQTJCLENBQUMsTUFBTSxFQUFFLGVBQWUsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1lBQ3hGLEtBQUssY0FBYyxDQUFDLFNBQVM7Z0JBQ3pCLE1BQU0sY0FBYyxHQUFTLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQVMsQ0FBQyxDQUFDO2dCQUMzRCxNQUFNLGdCQUFnQixHQUF3QyxRQUErQyxDQUFDO2dCQUM5RyxNQUFNLE9BQU8sR0FBWSxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQzdGLE9BQU8sSUFBSSxDQUFDLDBCQUEwQixDQUFDLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUN0RixLQUFLLGNBQWMsQ0FBQyxZQUFZLENBQUM7WUFDakMsS0FBSyxjQUFjLENBQUMsVUFBVTtnQkFDMUIsTUFBTSxVQUFVLEdBQTBCLE1BQU0sQ0FBQyxHQUFHLENBQTBCLENBQUM7Z0JBQy9FLE1BQU0sa0JBQWtCLEdBQXVDLFFBQThDLENBQUM7Z0JBQzlHLE9BQU8sSUFBSSxDQUFDLDBCQUEwQixDQUFDLFVBQVUsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1lBQzNFLEtBQUssY0FBYyxDQUFDLGVBQWUsQ0FBQztZQUNwQyxLQUFLLGNBQWMsQ0FBQyxjQUFjLENBQUM7WUFDbkMsS0FBSyxjQUFjLENBQUMsUUFBUTtnQkFDeEIsTUFBTTtZQUNWLEtBQUssY0FBYyxDQUFDLE1BQU07Z0JBQ3RCLHlFQUF5RTtnQkFDekUsTUFBTSxjQUFjLEdBQTZELFFBQW9FLENBQUM7Z0JBQ3RKLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDO29CQUM3QyxPQUFPO3dCQUNILFFBQVEsRUFBRSxRQUFRLENBQUMsV0FBVzt3QkFDOUIsT0FBTyxFQUFFLFNBQVM7cUJBQ3JCLENBQUM7Z0JBQ04sQ0FBQztnQkFDRCxNQUFNO1lBQ1Y7Z0JBQ0ksTUFBTSxJQUFJLEtBQUssQ0FBQywwREFBMEQsSUFBSSxlQUFlLENBQUMsQ0FBQztRQUN2RyxDQUFDO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDckIsQ0FBQztJQUVPLE1BQU0sQ0FBQyxLQUFLLENBQUMsOENBQThDLENBQy9ELE1BQWtCLEVBQ2xCLFFBQTZELEVBQzdELHVCQUFpQztRQUVqQyxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUMvRCxPQUFPO2dCQUNILFFBQVEsRUFBRSxRQUFRLENBQUMsV0FBVztnQkFDOUIsT0FBTyxFQUFFLG1CQUFtQjthQUMvQixDQUFDO1FBQ04sQ0FBQztRQUNELElBQUksUUFBUSxDQUFDLGlCQUFpQixJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3JDLE1BQU0sa0JBQWtCLEdBQWEsTUFBTSxRQUFRLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDL0UsS0FBSyxNQUFNLEtBQUssSUFBSSx1QkFBdUIsRUFBRSxDQUFDO2dCQUMxQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7b0JBQ3RDLE9BQU87d0JBQ0gsUUFBUSxFQUFFLFFBQVEsQ0FBQyxXQUFXO3dCQUM5QixPQUFPLEVBQUUsY0FBYyxLQUFLLDBDQUEwQztxQkFDekUsQ0FBQztnQkFDTixDQUFDO1lBQ0wsQ0FBQztRQUNMLENBQUM7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNyQixDQUFDO0lBRU8sTUFBTSxDQUFDLHlCQUF5QixDQUNwQyxNQUFrQixFQUNsQixLQUFjLEVBQ2QsUUFBOEM7UUFFOUMsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDdEMsT0FBTztnQkFDSCxRQUFRLEVBQUUsUUFBUSxDQUFDLFdBQVc7Z0JBQzlCLE9BQU8sRUFBRSxjQUFjO2FBQzFCLENBQUM7UUFDTixDQUFDO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDckIsQ0FBQztJQUVPLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxLQUFhLEVBQUUsUUFBOEM7UUFDakcsSUFBSSxRQUFRLENBQUMsU0FBUyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQzFELE9BQU87Z0JBQ0gsUUFBUSxFQUFFLFFBQVEsQ0FBQyxXQUFXO2dCQUM5QixPQUFPLEVBQUUsNEJBQTRCLFFBQVEsQ0FBQyxTQUFTLGFBQWE7YUFDdkUsQ0FBQztRQUNOLENBQUM7UUFDRCxJQUFJLFFBQVEsQ0FBQyxTQUFTLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDMUQsT0FBTztnQkFDSCxRQUFRLEVBQUUsUUFBUSxDQUFDLFdBQVc7Z0JBQzlCLE9BQU8sRUFBRSwyQkFBMkIsUUFBUSxDQUFDLFNBQVMsYUFBYTthQUN0RSxDQUFDO1FBQ04sQ0FBQztRQUNELElBQUksUUFBUSxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDakQsT0FBTztnQkFDSCxRQUFRLEVBQUUsUUFBUSxDQUFDLFdBQVc7Z0JBQzlCLE9BQU8sRUFBRSxTQUFTO2FBQ3JCLENBQUM7UUFDTixDQUFDO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDckIsQ0FBQztJQUVPLE1BQU0sQ0FBQyxLQUFLLENBQUMsb0NBQW9DLENBQ3JELE1BQWtCLEVBQ2xCLEtBQWEsRUFDYixRQUFtRDtRQUVuRCxJQUFJLFFBQVEsQ0FBQyxTQUFTLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDMUQsT0FBTztnQkFDSCxRQUFRLEVBQUUsUUFBUSxDQUFDLFdBQVc7Z0JBQzlCLE9BQU8sRUFBRSw0QkFBNEIsUUFBUSxDQUFDLFNBQVMsYUFBYTthQUN2RSxDQUFDO1FBQ04sQ0FBQztRQUNELElBQUksUUFBUSxDQUFDLFNBQVMsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUMxRCxPQUFPO2dCQUNILFFBQVEsRUFBRSxRQUFRLENBQUMsV0FBVztnQkFDOUIsT0FBTyxFQUFFLDJCQUEyQixRQUFRLENBQUMsU0FBUyxhQUFhO2FBQ3RFLENBQUM7UUFDTixDQUFDO1FBQ0QsSUFBSSxRQUFRLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNqRCxPQUFPO2dCQUNILFFBQVEsRUFBRSxRQUFRLENBQUMsV0FBVztnQkFDOUIsT0FBTyxFQUFFLFNBQVM7YUFDckIsQ0FBQztRQUNOLENBQUM7UUFDRCxJQUFJLFFBQVEsQ0FBQyxpQkFBaUIsSUFBSSxJQUFJLElBQUksQ0FBQyxDQUFDLE1BQU0sUUFBUSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDckcsT0FBTztnQkFDSCxRQUFRLEVBQUUsUUFBUSxDQUFDLFdBQVc7Z0JBQzlCLE9BQU8sRUFBRSx3Q0FBd0M7YUFDcEQsQ0FBQztRQUNOLENBQUM7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNyQixDQUFDO0lBRU8sTUFBTSxDQUFDLHlCQUF5QixDQUFDLEtBQWEsRUFBRSxRQUE4QztRQUNsRyxJQUFJLFFBQVEsQ0FBQyxTQUFTLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDMUQsT0FBTztnQkFDSCxRQUFRLEVBQUUsUUFBUSxDQUFDLFdBQVc7Z0JBQzlCLE9BQU8sRUFBRSw0QkFBNEIsUUFBUSxDQUFDLFNBQVMsYUFBYTthQUN2RSxDQUFDO1FBQ04sQ0FBQztRQUNELElBQUksUUFBUSxDQUFDLFNBQVMsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUMxRCxPQUFPO2dCQUNILFFBQVEsRUFBRSxRQUFRLENBQUMsV0FBVztnQkFDOUIsT0FBTyxFQUFFLDJCQUEyQixRQUFRLENBQUMsU0FBUyxhQUFhO2FBQ3RFLENBQUM7UUFDTixDQUFDO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDckIsQ0FBQztJQUVPLE1BQU0sQ0FBQywwQkFBMEIsQ0FDckMsS0FBYSxFQUNiLFFBQStDLEVBQy9DLGVBQXVCO1FBRXZCLElBQUksS0FBSyxLQUFLLGVBQWUsRUFBRSxDQUFDO1lBQzVCLE9BQU87Z0JBQ0gsUUFBUSxFQUFFLFFBQVEsQ0FBQyxXQUFXO2dCQUM5QixPQUFPLEVBQUUseUJBQXlCO2FBQ3JDLENBQUM7UUFDTixDQUFDO1FBQ0QsSUFBSSxRQUFRLENBQUMsU0FBUyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQzFELE9BQU87Z0JBQ0gsUUFBUSxFQUFFLFFBQVEsQ0FBQyxXQUFXO2dCQUM5QixPQUFPLEVBQUUsNEJBQTRCLFFBQVEsQ0FBQyxTQUFTLGFBQWE7YUFDdkUsQ0FBQztRQUNOLENBQUM7UUFDRCxJQUFJLFFBQVEsQ0FBQyxTQUFTLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDMUQsT0FBTztnQkFDSCxRQUFRLEVBQUUsUUFBUSxDQUFDLFdBQVc7Z0JBQzlCLE9BQU8sRUFBRSwyQkFBMkIsUUFBUSxDQUFDLFNBQVMsYUFBYTthQUN0RSxDQUFDO1FBQ04sQ0FBQztRQUNELElBQUksUUFBUSxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDakQsT0FBTztnQkFDSCxRQUFRLEVBQUUsUUFBUSxDQUFDLFdBQVc7Z0JBQzlCLE9BQU8sRUFBRSxTQUFTO2FBQ3JCLENBQUM7UUFDTixDQUFDO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDckIsQ0FBQztJQUVPLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxLQUFhLEVBQUUsUUFBOEM7UUFDakcsSUFBSSxRQUFRLENBQUMsR0FBRyxJQUFJLEtBQUssR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDdkMsT0FBTztnQkFDSCxRQUFRLEVBQUUsUUFBUSxDQUFDLFdBQVc7Z0JBQzlCLE9BQU8sRUFBRSw0QkFBNEIsUUFBUSxDQUFDLEdBQUcsRUFBRTthQUN0RCxDQUFDO1FBQ04sQ0FBQztRQUNELElBQUksUUFBUSxDQUFDLEdBQUcsSUFBSSxLQUFLLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ3ZDLE9BQU87Z0JBQ0gsUUFBUSxFQUFFLFFBQVEsQ0FBQyxXQUFXO2dCQUM5QixPQUFPLEVBQUUsMkJBQTJCLFFBQVEsQ0FBQyxHQUFHLEVBQUU7YUFDckQsQ0FBQztRQUNOLENBQUM7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNyQixDQUFDO0lBRU8sTUFBTSxDQUFDLHNCQUFzQixDQUFDLEtBQVcsRUFBRSxRQUE0QztRQUMzRixJQUFJLFFBQVEsQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztZQUNsRSxPQUFPO2dCQUNILFFBQVEsRUFBRSxRQUFRLENBQUMsV0FBVztnQkFDOUIsT0FBTyxFQUFFLHFCQUFxQixVQUFVLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO2FBQ2xFLENBQUM7UUFDTixDQUFDO1FBQ0QsSUFBSSxRQUFRLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7WUFDbEUsT0FBTztnQkFDSCxRQUFRLEVBQUUsUUFBUSxDQUFDLFdBQVc7Z0JBQzlCLE9BQU8sRUFBRSxzQkFBc0IsVUFBVSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTthQUNuRSxDQUFDO1FBQ04sQ0FBQztRQUNELElBQUksUUFBUSxDQUFDLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUM3QyxPQUFPO2dCQUNILFFBQVEsRUFBRSxRQUFRLENBQUMsV0FBVztnQkFDOUIsT0FBTyxFQUFFLFNBQVM7YUFDckIsQ0FBQztRQUNOLENBQUM7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNyQixDQUFDO0lBRUQsc0RBQXNEO0lBQzlDLE1BQU0sQ0FBQywyQkFBMkIsQ0FDdEMsTUFBa0IsRUFDbEIsS0FBeUIsRUFDekIsUUFBOEM7UUFFOUMsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxTQUFTLElBQUksS0FBSyxDQUFDLEdBQUcsSUFBSSxTQUFTLElBQUksS0FBSyxDQUFDLE1BQU0sSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQ2pILE9BQU87Z0JBQ0gsUUFBUSxFQUFFLFFBQVEsQ0FBQyxXQUFXO2dCQUM5QixPQUFPLEVBQUUsVUFBVTthQUN0QixDQUFDO1FBQ04sQ0FBQztRQUNELElBQUksS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2QsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDcEMsSUFBSSxRQUFRLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztnQkFDeEYsT0FBTztvQkFDSCxRQUFRLEVBQUUsUUFBUSxDQUFDLFdBQVc7b0JBQzlCLE9BQU8sRUFBRSxnQ0FBZ0MsVUFBVSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7aUJBQ3hGLENBQUM7WUFDTixDQUFDO1lBQ0QsSUFBSSxRQUFRLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztnQkFDeEYsT0FBTztvQkFDSCxRQUFRLEVBQUUsUUFBUSxDQUFDLFdBQVc7b0JBQzlCLE9BQU8sRUFBRSxpQ0FBaUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7aUJBQ3pGLENBQUM7WUFDTixDQUFDO1lBQ0QsSUFBSSxRQUFRLENBQUMsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDbkQsT0FBTztvQkFDSCxRQUFRLEVBQUUsUUFBUSxDQUFDLFdBQVc7b0JBQzlCLE9BQU8sRUFBRSxvQkFBb0I7aUJBQ2hDLENBQUM7WUFDTixDQUFDO1FBQ0wsQ0FBQztRQUVELElBQUksS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ1osS0FBSyxDQUFDLEdBQUcsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDaEMsSUFBSSxRQUFRLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztnQkFDaEYsT0FBTztvQkFDSCxRQUFRLEVBQUUsUUFBUSxDQUFDLFdBQVc7b0JBQzlCLE9BQU8sRUFBRSw4QkFBOEIsVUFBVSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7aUJBQ2xGLENBQUM7WUFDTixDQUFDO1lBQ0QsSUFBSSxRQUFRLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztnQkFDaEYsT0FBTztvQkFDSCxRQUFRLEVBQUUsUUFBUSxDQUFDLFdBQVc7b0JBQzlCLE9BQU8sRUFBRSwrQkFBK0IsVUFBVSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7aUJBQ25GLENBQUM7WUFDTixDQUFDO1lBQ0QsSUFBSSxRQUFRLENBQUMsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDakQsT0FBTztvQkFDSCxRQUFRLEVBQUUsUUFBUSxDQUFDLFdBQVc7b0JBQzlCLE9BQU8sRUFBRSxrQkFBa0I7aUJBQzlCLENBQUM7WUFDTixDQUFDO1FBQ0wsQ0FBQztRQUVELElBQUksUUFBUSxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDbEMsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQzlCLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7b0JBQ3pCLE9BQU87d0JBQ0gsUUFBUSxFQUFFLFFBQVEsQ0FBQyxXQUFXO3dCQUM5QixPQUFPLEVBQUUsU0FBUyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVU7cUJBQy9DLENBQUM7Z0JBQ04sQ0FBQztZQUNMLENBQUM7UUFDTCxDQUFDO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDckIsQ0FBQztJQUVELHNEQUFzRDtJQUM5QyxNQUFNLENBQUMsMEJBQTBCLENBQ3JDLEtBQVcsRUFDWCxRQUE2QyxFQUM3QyxPQUFnQjtRQUVoQixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDWCxPQUFPO2dCQUNILFFBQVEsRUFBRSxRQUFRLENBQUMsV0FBVztnQkFDOUIsT0FBTyxFQUFFLFNBQVM7YUFDckIsQ0FBQztRQUNOLENBQUM7UUFDRCxJQUFJLFFBQVEsQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztZQUMxRSxPQUFPO2dCQUNILFFBQVEsRUFBRSxRQUFRLENBQUMsV0FBVztnQkFDOUIsT0FBTyxFQUFFLDBCQUEwQixVQUFVLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO2FBQzNFLENBQUM7UUFDTixDQUFDO1FBQ0QsSUFBSSxRQUFRLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7WUFDMUUsT0FBTztnQkFDSCxRQUFRLEVBQUUsUUFBUSxDQUFDLFdBQVc7Z0JBQzlCLE9BQU8sRUFBRSwyQkFBMkIsVUFBVSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTthQUM1RSxDQUFDO1FBQ04sQ0FBQztRQUNELElBQUksUUFBUSxDQUFDLFVBQVUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNyRCxPQUFPO2dCQUNILFFBQVEsRUFBRSxRQUFRLENBQUMsV0FBVztnQkFDOUIsT0FBTyxFQUFFLGNBQWM7YUFDMUIsQ0FBQztRQUNOLENBQUM7UUFDRCxNQUFNLElBQUksR0FBUyxhQUFhLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBUyxDQUFDO1FBQ2hFLElBQUksUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ25CLE1BQU0sT0FBTyxHQUFTLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDOUMsSUFDSSxDQUFDLENBQ0csSUFBSSxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSzttQkFDdkIsQ0FDQyxJQUFJLENBQUMsS0FBSyxLQUFLLE9BQU8sQ0FBQyxLQUFLO3VCQUN6QixJQUFJLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQ3JDLENBQ0osRUFDSCxDQUFDO2dCQUNDLE9BQU87b0JBQ0gsUUFBUSxFQUFFLFFBQVEsQ0FBQyxXQUFXO29CQUM5QixPQUFPLEVBQUUsMEJBQTBCLE9BQU8sQ0FBQyxLQUFLLElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRTtpQkFDeEUsQ0FBQztZQUNOLENBQUM7UUFDTCxDQUFDO1FBQ0QsSUFBSSxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbkIsTUFBTSxPQUFPLEdBQVMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM5QyxJQUNJLENBQUMsQ0FDRyxJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLO21CQUN2QixDQUNDLElBQUksQ0FBQyxLQUFLLEtBQUssT0FBTyxDQUFDLEtBQUs7dUJBQ3pCLElBQUksQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FDckMsQ0FDSixFQUNILENBQUM7Z0JBQ0MsT0FBTztvQkFDSCxRQUFRLEVBQUUsUUFBUSxDQUFDLFdBQVc7b0JBQzlCLE9BQU8sRUFBRSwyQkFBMkIsT0FBTyxDQUFDLEtBQUssSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFO2lCQUN6RSxDQUFDO1lBQ04sQ0FBQztRQUNMLENBQUM7UUFDRCxJQUFJLFFBQVEsQ0FBQyxVQUFVLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDcEQsT0FBTztnQkFDSCxRQUFRLEVBQUUsUUFBUSxDQUFDLFdBQVc7Z0JBQzlCLE9BQU8sRUFBRSxjQUFjO2FBQzFCLENBQUM7UUFDTixDQUFDO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDckIsQ0FBQztJQUVPLE1BQU0sQ0FBQywwQkFBMEIsQ0FDckMsS0FBNEIsRUFDNUIsUUFBNEM7UUFFNUMsTUFBTSxLQUFLLEdBQWUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFpQixDQUFDLENBQUM7UUFDeEYsSUFBSSxhQUFhLEdBQVcsQ0FBQyxDQUFDO1FBQzlCLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDMUMsT0FBTztvQkFDSCxRQUFRLEVBQUUsUUFBUSxDQUFDLFdBQVc7b0JBQzlCLE9BQU8sRUFBRSxTQUFTO2lCQUNyQixDQUFDO1lBQ04sQ0FBQztZQUNELElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQztnQkFDdkUsT0FBTztvQkFDSCxRQUFRLEVBQUUsUUFBUSxDQUFDLFdBQVc7b0JBQzlCLE9BQU8sRUFBRSwrQkFBK0IsUUFBUSxDQUFDLGdCQUFnQixFQUFFO2lCQUN0RSxDQUFDO1lBQ04sQ0FBQztZQUNELElBQUksYUFBYSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUN4RSxPQUFPO29CQUNILFFBQVEsRUFBRSxRQUFRLENBQUMsV0FBVztvQkFDOUIsT0FBTyxFQUFFLGlDQUFpQyxRQUFRLENBQUMsT0FBTyxLQUFLO2lCQUNsRSxDQUFDO1lBQ04sQ0FBQztZQUNELGFBQWEsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQzNCLElBQUksYUFBYSxDQUFDLG9CQUFvQixDQUFDLGFBQWEsRUFBRSxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ2pGLE9BQU87b0JBQ0gsUUFBUSxFQUFFLFFBQVEsQ0FBQyxXQUFXO29CQUM5QixPQUFPLEVBQUUsMkRBQTJELFFBQVEsQ0FBQyxZQUFZLEVBQUU7aUJBQzlGLENBQUM7WUFDTixDQUFDO1FBQ0wsQ0FBQztRQUNELE9BQU8sU0FBUyxDQUFDO0lBQ3JCLENBQUM7Q0FDSjtBQUVELCtDQUErQztBQUMvQyxTQUFTLFlBQVksQ0FBQyxHQUFXO0lBQzdCLE9BQU8sR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDM0MsQ0FBQztBQUVELCtDQUErQztBQUMvQyxTQUFTLFVBQVUsQ0FBQyxJQUFVO0lBQzFCLE9BQU87UUFDSCxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzVCLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxXQUFXLEVBQUU7S0FDckIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVudmlyb25tZW50SW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgRGF0ZVV0aWxpdGllcywgVGltZSB9IGZyb20gJy4vZGF0ZS51dGlsaXRpZXMnO1xuaW1wb3J0IHsgRW50aXR5VXRpbGl0aWVzIH0gZnJvbSAnLi9lbnRpdHkudXRpbGl0aWVzJztcbmltcG9ydCB7IEZpbGVVdGlsaXRpZXMgfSBmcm9tICcuL2ZpbGUudXRpbGl0aWVzJztcbmltcG9ydCB7IEJhc2VFbnRpdHlUeXBlIH0gZnJvbSAnLi4vY2xhc3Nlcy9lbnRpdHkubW9kZWwnO1xuaW1wb3J0IHsgQXV0b2NvbXBsZXRlU3RyaW5nQ2hpcHNBcnJheURlY29yYXRvckNvbmZpZ0ludGVybmFsLCBFbnRpdHlBcnJheURlY29yYXRvckNvbmZpZ0ludGVybmFsIH0gZnJvbSAnLi4vZGVjb3JhdG9ycy9hcnJheS9hcnJheS1kZWNvcmF0b3ItaW50ZXJuYWwuZGF0YSc7XG5pbXBvcnQgeyBEZWNvcmF0b3JUeXBlcyB9IGZyb20gJy4uL2RlY29yYXRvcnMvYmFzZS9kZWNvcmF0b3ItdHlwZXMuZW51bSc7XG5pbXBvcnQgeyBQcm9wZXJ0eURlY29yYXRvckNvbmZpZ0ludGVybmFsIH0gZnJvbSAnLi4vZGVjb3JhdG9ycy9iYXNlL3Byb3BlcnR5LWRlY29yYXRvci1pbnRlcm5hbC5kYXRhJztcbmltcG9ydCB7IFRvZ2dsZUJvb2xlYW5EZWNvcmF0b3JDb25maWdJbnRlcm5hbCB9IGZyb20gJy4uL2RlY29yYXRvcnMvYm9vbGVhbi9ib29sZWFuLWRlY29yYXRvci1pbnRlcm5hbC5kYXRhJztcbmltcG9ydCB7IEN1c3RvbURlY29yYXRvckNvbmZpZ0ludGVybmFsIH0gZnJvbSAnLi4vZGVjb3JhdG9ycy9jdXN0b20vY3VzdG9tLWRlY29yYXRvci1pbnRlcm5hbC5kYXRhJztcbmltcG9ydCB7IERhdGVSYW5nZURhdGVEZWNvcmF0b3JDb25maWdJbnRlcm5hbCwgRGF0ZVRpbWVEYXRlRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwsIERlZmF1bHREYXRlRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwgfSBmcm9tICcuLi9kZWNvcmF0b3JzL2RhdGUvZGF0ZS1kZWNvcmF0b3ItaW50ZXJuYWwuZGF0YSc7XG5pbXBvcnQgeyBEYXRlUmFuZ2UgfSBmcm9tICcuLi9kZWNvcmF0b3JzL2RhdGUvZGF0ZS1kZWNvcmF0b3IuZGF0YSc7XG5pbXBvcnQgeyBEZWZhdWx0RmlsZURlY29yYXRvckNvbmZpZ0ludGVybmFsIH0gZnJvbSAnLi4vZGVjb3JhdG9ycy9maWxlL2ZpbGUtZGVjb3JhdG9yLWludGVybmFsLmRhdGEnO1xuaW1wb3J0IHsgRmlsZURhdGEgfSBmcm9tICcuLi9kZWNvcmF0b3JzL2ZpbGUvZmlsZS1kZWNvcmF0b3IuZGF0YSc7XG5pbXBvcnQgeyBEZWZhdWx0TnVtYmVyRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwgfSBmcm9tICcuLi9kZWNvcmF0b3JzL251bWJlci9udW1iZXItZGVjb3JhdG9yLWludGVybmFsLmRhdGEnO1xuaW1wb3J0IHsgRGVmYXVsdE9iamVjdERlY29yYXRvckNvbmZpZ0ludGVybmFsIH0gZnJvbSAnLi4vZGVjb3JhdG9ycy9vYmplY3Qvb2JqZWN0LWRlY29yYXRvci1pbnRlcm5hbC5kYXRhJztcbmltcG9ydCB7IEF1dG9jb21wbGV0ZVN0cmluZ0RlY29yYXRvckNvbmZpZ0ludGVybmFsLCBEZWZhdWx0U3RyaW5nRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwsIFBhc3N3b3JkU3RyaW5nRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwsIFRleHRib3hTdHJpbmdEZWNvcmF0b3JDb25maWdJbnRlcm5hbCB9IGZyb20gJy4uL2RlY29yYXRvcnMvc3RyaW5nL3N0cmluZy1kZWNvcmF0b3ItaW50ZXJuYWwuZGF0YSc7XG5pbXBvcnQgeyBMb2Rhc2hVdGlsaXRpZXMgfSBmcm9tICcuLi9lbmNhcHN1bGF0aW9uL2xvZGFzaC51dGlsaXRpZXMnO1xuaW1wb3J0IHsgUmVmbGVjdFV0aWxpdGllcyB9IGZyb20gJy4uL2VuY2Fwc3VsYXRpb24vcmVmbGVjdC51dGlsaXRpZXMnO1xuXG4vKipcbiAqIEEgdmFsaWRhdGlvbiBlcnJvciByZXBvcnRlZCBieSB0aGUgdmFsaWRhdGlvbiB1dGlsaXRpZXMuXG4gKiBDb25zaXN0cyBvZiB0aGUgcHJvcGVydHkgbmFtZSB3aGVyZSB0aGUgZXJyb3Igb3JpZ2luYXRlZCBmcm9tIGFuZCBhIG1lc3NhZ2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmFsaWRhdGlvbkVycm9yIHtcbiAgICAvKipcbiAgICAgKiBUaGUgcHJvcGVydHkgbmFtZSBvbiB3aGljaCB0aGUgZXJyb3Igb2NjdXJyZWQuIFRoaXMgaXMgdGhlIGRpc3BsYXlOYW1lIHZhbHVlLlxuICAgICAqL1xuICAgIHByb3BlcnR5OiBzdHJpbmcsXG4gICAgLyoqXG4gICAgICogVGhlIHZhbGlkYXRpb24gZXJyb3IgbWVzc2FnZS5cbiAgICAgKi9cbiAgICBtZXNzYWdlOiBzdHJpbmdcbn1cblxuLyoqXG4gKiBDb250YWlucyBIZWxwZXJNZXRob2RzIGFyb3VuZCBoYW5kbGluZyBWYWxpZGF0aW9uIG9mIGVudGl0aWVzIGFuZCBwcm9wZXJ0aWVzLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgVmFsaWRhdGlvblV0aWxpdGllcyB7XG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIHRoZSB2YWx1ZXMgb24gYW4gZW50aXR5IGFyZSB2YWxpZC5cbiAgICAgKiBBbHNvIGNoZWNrcyBhbGwgdGhlIHZhbGlkYXRvcnMgZ2l2ZW4gYnkgdGhlIG1ldGFkYXRhIChcInJlcXVpcmVkXCIsIFwibWF4TGVuZ3RoXCIgZXRjLikuXG4gICAgICogQHBhcmFtIGVudGl0eSAtIFRoZSBlbnRpdHkgdG8gdmFsaWRhdGUuXG4gICAgICogQHBhcmFtIGluamVjdG9yIC0gQW4gYW5ndWxhciBlbnZpcm9ubWVudCBpbmplY3Rvci5cbiAgICAgKiBAcGFyYW0gb21pdCAtIFdoZXRoZXIgdG8gY2hlY2sgZm9yIGNyZWF0aW5nIG9yIGVkaXRpbmcgdmFsaWRpdHkuXG4gICAgICogQHJldHVybnMgV2hldGhlciBvciBub3QgdGhlIGVudGl0eSBpcyB2YWxpZC5cbiAgICAgKi9cbiAgICBzdGF0aWMgYXN5bmMgaXNFbnRpdHlWYWxpZDxFbnRpdHlUeXBlIGV4dGVuZHMgQmFzZUVudGl0eVR5cGU8RW50aXR5VHlwZT4+KFxuICAgICAgICBlbnRpdHk6IEVudGl0eVR5cGUsXG4gICAgICAgIGluamVjdG9yOiBFbnZpcm9ubWVudEluamVjdG9yLFxuICAgICAgICBvbWl0PzogJ2NyZWF0ZScgfCAndXBkYXRlJ1xuICAgICk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gKGF3YWl0IHRoaXMuZ2V0RW50aXR5VmFsaWRhdGlvbkVycm9ycyhlbnRpdHksIGluamVjdG9yLCBvbWl0KSkubGVuZ3RoID09PSAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgYWxsIHZhbGlkYXRpb24gZXJyb3JzIG9uIHRoZSBnaXZlbiBlbnRpdHkuXG4gICAgICogQHBhcmFtIGVudGl0eSAtIFRoZSBlbnRpdHkgdG8gdmFsaWRhdGUuXG4gICAgICogQHBhcmFtIGluamVjdG9yIC0gQW4gYW5ndWxhciBlbnZpcm9ubWVudCBpbmplY3Rvci5cbiAgICAgKiBAcGFyYW0gb21pdCAtIFdoYXQga2V5cyBub3QgdG8gY2hlY2suIEFuIGVtcHR5IHZhbHVlIG1lYW5zIG5vIGtleXMgYXJlIG9taXR0ZWQuXG4gICAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgdmFsaWRhdGlvbiBlcnJvcnMgb24gdGhlIHByb3ZpZGVkIGVudGl0eS5cbiAgICAgKi9cbiAgICBzdGF0aWMgYXN5bmMgZ2V0RW50aXR5VmFsaWRhdGlvbkVycm9yczxFbnRpdHlUeXBlIGV4dGVuZHMgQmFzZUVudGl0eVR5cGU8RW50aXR5VHlwZT4+KFxuICAgICAgICBlbnRpdHk6IEVudGl0eVR5cGUsXG4gICAgICAgIGluamVjdG9yOiBFbnZpcm9ubWVudEluamVjdG9yLFxuICAgICAgICBvbWl0PzogJ2NyZWF0ZScgfCAndXBkYXRlJ1xuICAgICk6IFByb21pc2U8VmFsaWRhdGlvbkVycm9yW10+IHtcbiAgICAgICAgY29uc3QgcmVzOiBWYWxpZGF0aW9uRXJyb3JbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBFbnRpdHlVdGlsaXRpZXMua2V5c09mKGVudGl0eSwgaW5qZWN0b3IpKSB7XG4gICAgICAgICAgICBjb25zdCBlcnI6IFZhbGlkYXRpb25FcnJvciB8IHVuZGVmaW5lZCA9IGF3YWl0IHRoaXMuZ2V0UHJvcGVydHlWYWxpZGF0aW9uRXJyb3IoZW50aXR5LCBrZXksIG9taXQpO1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIHJlcy5wdXNoKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICAvLyAvKipcbiAgICAvLyAgKiBDaGVja3MgaWYgYSBzaW5nbGUgcHJvcGVydHkgdmFsdWUgaXMgdmFsaWQuXG4gICAgLy8gICpcbiAgICAvLyAgKiBAcGFyYW0gZW50aXR5IC0gVGhlIGVudGl0eSB3aGVyZSB0aGUgcHJvcGVydHkgaXMgZnJvbS5cbiAgICAvLyAgKiBAcGFyYW0ga2V5IC0gVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5LlxuICAgIC8vICAqIEBwYXJhbSBvbWl0IC0gV2hldGhlciB0byBjaGVjayBpZiB0aGUgZ2l2ZW4gZW50aXR5IGlzIHZhbGlkIGZvciBjcmVhdGlvbiBvciB1cGRhdGluZy5cbiAgICAvLyAgKiBAcmV0dXJucyBXaGV0aGVyIG9yIG5vdCB0aGUgcHJvcGVydHkgdmFsdWUgaXMgdmFsaWQuXG4gICAgLy8gICogQHRocm93cyBUaHJvd3Mgd2hlbiBpdCBleHRyYWN0cyBhbiB1bmtub3duIG1ldGFkYXRhIHR5cGUuXG4gICAgLy8gICovXG4gICAgLy8gc3RhdGljIGlzUHJvcGVydHlWYWxpZDxFbnRpdHlUeXBlIGV4dGVuZHMgQmFzZUVudGl0eVR5cGU8RW50aXR5VHlwZT4+KFxuICAgIC8vICAgICBlbnRpdHk6IEVudGl0eVR5cGUsXG4gICAgLy8gICAgIGtleToga2V5b2YgRW50aXR5VHlwZSxcbiAgICAvLyAgICAgb21pdD86ICdjcmVhdGUnIHwgJ3VwZGF0ZSdcbiAgICAvLyApOiBib29sZWFuIHtcbiAgICAvLyAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWxpZGF0aW9uRXJyb3IoZW50aXR5LCBrZXksIG9taXQpID09IG51bGw7XG4gICAgLy8gfVxuXG4gICAgLyoqXG4gICAgICogVmFsaWRhdGVzIHRoZSBwcm9wZXJ0eSBvbiB0aGUgZ2l2ZW4gZW50aXR5IHdpdGggdGhlIGdpdmVuIGtleS5cbiAgICAgKiBAcGFyYW0gZW50aXR5IC0gVGhlIGVudGl0eSBvbiB3aGljaCB0aGUgcHJvcGVydHkgdG8gY2hlY2sgaXMuXG4gICAgICogQHBhcmFtIGtleSAtIFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIHZhbGlkYXRlLlxuICAgICAqIEBwYXJhbSBvbWl0IC0gV2hhdCBrZXlzIG5vdCB0byBjaGVjay4gQW4gZW1wdHkgdmFsdWUgbWVhbnMgbm8ga2V5cyBhcmUgb21pdHRlZC5cbiAgICAgKiBAcmV0dXJucyBBIHZhbGlkYXRpb24gZXJyb3Igd2hlbiB0aGUgcHJvcGVydHkgaXMgbm90IHZhbGlkLCB1bmRlZmluZWQgb3RoZXJ3aXNlLlxuICAgICAqIEB0aHJvd3MgV2hlbiB0aGUgdHlwZSBvZiB0aGUgcHJvcGVydHkgaXMgbm90IGtub3duLlxuICAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzb25hci9jb2duaXRpdmUtY29tcGxleGl0eVxuICAgIHN0YXRpYyBhc3luYyBnZXRQcm9wZXJ0eVZhbGlkYXRpb25FcnJvcjxFbnRpdHlUeXBlIGV4dGVuZHMgQmFzZUVudGl0eVR5cGU8RW50aXR5VHlwZT4+KFxuICAgICAgICBlbnRpdHk6IEVudGl0eVR5cGUsXG4gICAgICAgIGtleToga2V5b2YgRW50aXR5VHlwZSxcbiAgICAgICAgb21pdD86ICdjcmVhdGUnIHwgJ3VwZGF0ZSdcbiAgICApOiBQcm9taXNlPFZhbGlkYXRpb25FcnJvciB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBjb25zdCB0eXBlOiBEZWNvcmF0b3JUeXBlcyB8IHVuZGVmaW5lZCA9IEVudGl0eVV0aWxpdGllcy5nZXRQcm9wZXJ0eVR5cGUoZW50aXR5LCBrZXkpO1xuICAgICAgICBpZiAodHlwZSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWV0YWRhdGE6IFByb3BlcnR5RGVjb3JhdG9yQ29uZmlnSW50ZXJuYWw8dW5rbm93bj4gfCB1bmRlZmluZWQgPSBFbnRpdHlVdGlsaXRpZXMuZ2V0UHJvcGVydHlNZXRhZGF0YShlbnRpdHksIGtleSwgdHlwZSk7XG5cbiAgICAgICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICAgICAgaWYgKG1ldGFkYXRhID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtZXRhZGF0YS5vbWl0Rm9yQ3JlYXRlICYmIG9taXQgPT09ICdjcmVhdGUnKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZXRhZGF0YS5vbWl0Rm9yVXBkYXRlICYmIG9taXQgPT09ICd1cGRhdGUnKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlICE9PSBEZWNvcmF0b3JUeXBlcy5IQVNfTUFOWSAmJiBtZXRhZGF0YS5yZXF1aXJlZChlbnRpdHkpICYmIChlbnRpdHlba2V5XSA9PSB1bmRlZmluZWQgfHwgZW50aXR5W2tleV0gPT09ICcnKSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ3JlcXVpcmVkJ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW1ldGFkYXRhLnJlcXVpcmVkKGVudGl0eSkgJiYgKGVudGl0eVtrZXldID09IHVuZGVmaW5lZCB8fCBlbnRpdHlba2V5XSA9PT0gJycpKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5CT09MRUFOX0RST1BET1dOOlxuICAgICAgICAgICAgICAgIC8vIEJlY2F1c2Ugb25seSB2YWxpZCB2YWx1ZXMgY2FuIGJlIHNlbGVjdGVkLCB0aGlzIGlzIGFsd2F5cyB0cnVlIHdoZW4gaXQgaGFzIGEgdmFsdWVcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5CT09MRUFOX0NIRUNLQk9YOlxuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5CT09MRUFOX1RPR0dMRTpcbiAgICAgICAgICAgICAgICBjb25zdCBlbnRpdHlCb29sZWFuOiBib29sZWFuID0gZW50aXR5W2tleV0gYXMgYm9vbGVhbjtcbiAgICAgICAgICAgICAgICBjb25zdCBib29sZWFuTWV0YWRhdGE6IFRvZ2dsZUJvb2xlYW5EZWNvcmF0b3JDb25maWdJbnRlcm5hbCA9IG1ldGFkYXRhIGFzIFRvZ2dsZUJvb2xlYW5EZWNvcmF0b3JDb25maWdJbnRlcm5hbDtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRCb29sZWFuVmFsaWRhdGlvbkVycm9yKGVudGl0eSwgZW50aXR5Qm9vbGVhbiwgYm9vbGVhbk1ldGFkYXRhKTtcbiAgICAgICAgICAgIGNhc2UgRGVjb3JhdG9yVHlwZXMuU1RSSU5HX0RST1BET1dOOlxuICAgICAgICAgICAgICAgIC8vIEJlY2F1c2Ugb25seSB2YWxpZCB2YWx1ZXMgY2FuIGJlIHNlbGVjdGVkLCB0aGlzIGlzIGFsd2F5cyB0cnVlIHdoZW4gaXQgaGFzIGEgdmFsdWVcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5TVFJJTkc6XG4gICAgICAgICAgICAgICAgY29uc3QgZW50aXR5U3RyaW5nOiBzdHJpbmcgPSBlbnRpdHlba2V5XSBhcyBzdHJpbmc7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nTWV0YWRhdGE6IERlZmF1bHRTdHJpbmdEZWNvcmF0b3JDb25maWdJbnRlcm5hbCA9IG1ldGFkYXRhIGFzIERlZmF1bHRTdHJpbmdEZWNvcmF0b3JDb25maWdJbnRlcm5hbDtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmdWYWxpZGF0aW9uRXJyb3IoZW50aXR5U3RyaW5nLCBzdHJpbmdNZXRhZGF0YSk7XG4gICAgICAgICAgICBjYXNlIERlY29yYXRvclR5cGVzLlNUUklOR19BVVRPQ09NUExFVEU6XG4gICAgICAgICAgICAgICAgY29uc3QgZW50aXR5QXV0b2NvbXBsZXRlU3RyaW5nOiBzdHJpbmcgPSBlbnRpdHlba2V5XSBhcyBzdHJpbmc7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHN0eWxpc3RpYy9tYXgtbGVuXG4gICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nQXV0b2NvbXBsZXRlTWV0YWRhdGE6IEF1dG9jb21wbGV0ZVN0cmluZ0RlY29yYXRvckNvbmZpZ0ludGVybmFsID0gbWV0YWRhdGEgYXMgQXV0b2NvbXBsZXRlU3RyaW5nRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWw7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QXV0b2NvbXBsZXRlU3RyaW5nVmFsaWRhdGlvbkVycm9yKGVudGl0eSwgZW50aXR5QXV0b2NvbXBsZXRlU3RyaW5nLCBzdHJpbmdBdXRvY29tcGxldGVNZXRhZGF0YSk7XG4gICAgICAgICAgICBjYXNlIERlY29yYXRvclR5cGVzLlNUUklOR19URVhUQk9YOlxuICAgICAgICAgICAgICAgIGNvbnN0IGVudGl0eVRleHRib3g6IHN0cmluZyA9IGVudGl0eVtrZXldIGFzIHN0cmluZztcbiAgICAgICAgICAgICAgICBjb25zdCB0ZXh0Ym94TWV0YWRhdGE6IFRleHRib3hTdHJpbmdEZWNvcmF0b3JDb25maWdJbnRlcm5hbCA9IG1ldGFkYXRhIGFzIFRleHRib3hTdHJpbmdEZWNvcmF0b3JDb25maWdJbnRlcm5hbDtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRUZXh0Ym94VmFsaWRhdGlvbkVycm9yKGVudGl0eVRleHRib3gsIHRleHRib3hNZXRhZGF0YSk7XG4gICAgICAgICAgICBjYXNlIERlY29yYXRvclR5cGVzLlNUUklOR19QQVNTV09SRDpcbiAgICAgICAgICAgICAgICBjb25zdCBlbnRpdHlQYXNzd29yZDogc3RyaW5nID0gZW50aXR5W2tleV0gYXMgc3RyaW5nO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhc3N3b3JkTWV0YWRhdGE6IFBhc3N3b3JkU3RyaW5nRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwgPSBtZXRhZGF0YSBhcyBQYXNzd29yZFN0cmluZ0RlY29yYXRvckNvbmZpZ0ludGVybmFsO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbmZpcm1QYXNzd29yZDogc3RyaW5nID0gUmVmbGVjdFV0aWxpdGllcy5nZXRNZXRhZGF0YShFbnRpdHlVdGlsaXRpZXMuQ09ORklSTV9QQVNTV09SRF9LRVksIGVudGl0eSwga2V5KSBhcyBzdHJpbmc7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UGFzc3dvcmRWYWxpZGF0aW9uRXJyb3IoZW50aXR5UGFzc3dvcmQsIHBhc3N3b3JkTWV0YWRhdGEsIGNvbmZpcm1QYXNzd29yZCk7XG4gICAgICAgICAgICBjYXNlIERlY29yYXRvclR5cGVzLk5VTUJFUl9EUk9QRE9XTjpcbiAgICAgICAgICAgICAgICAvLyBCZWNhdXNlIG9ubHkgdmFsaWQgdmFsdWVzIGNhbiBiZSBzZWxlY3RlZCwgdGhpcyBpcyBhbHdheXMgdHJ1ZSB3aGVuIGl0IGhhcyBhIHZhbHVlXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGNhc2UgRGVjb3JhdG9yVHlwZXMuTlVNQkVSOlxuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5OVU1CRVJfU0xJREVSOlxuICAgICAgICAgICAgICAgIGNvbnN0IGVudGl0eU51bWJlcjogbnVtYmVyID0gZW50aXR5W2tleV0gYXMgbnVtYmVyO1xuICAgICAgICAgICAgICAgIGNvbnN0IG51bWJlck1ldGFkYXRhOiBEZWZhdWx0TnVtYmVyRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwgPSBtZXRhZGF0YSBhcyBEZWZhdWx0TnVtYmVyRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWw7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TnVtYmVyVmFsaWRhdGlvbkVycm9yKGVudGl0eU51bWJlciwgbnVtYmVyTWV0YWRhdGEpO1xuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5PQkpFQ1Q6XG4gICAgICAgICAgICAgICAgY29uc3QgZW50aXR5T2JqZWN0OiBFbnRpdHlUeXBlID0gZW50aXR5W2tleV0gYXMgRW50aXR5VHlwZTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHBhcmFtZXRlcktleSBpbiBlbnRpdHlPYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWU6IHVua25vd24gPSBlbnRpdHlPYmplY3RbcGFyYW1ldGVyS2V5XTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgIShtZXRhZGF0YSBhcyBEZWZhdWx0T2JqZWN0RGVjb3JhdG9yQ29uZmlnSW50ZXJuYWw8RW50aXR5VHlwZT4pLm9taXQuaW5jbHVkZXMocGFyYW1ldGVyS2V5KVxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgISghbWV0YWRhdGEucmVxdWlyZWQoZW50aXR5KSAmJiAodmFsdWUgPT0gdW5kZWZpbmVkIHx8IHZhbHVlID09ICcnKSlcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnI6IFZhbGlkYXRpb25FcnJvciB8IHVuZGVmaW5lZCA9IGF3YWl0IHRoaXMuZ2V0UHJvcGVydHlWYWxpZGF0aW9uRXJyb3IoZW50aXR5T2JqZWN0LCBwYXJhbWV0ZXJLZXksIG9taXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYCR7ZXJyLnByb3BlcnR5fSBpcyBpbnZhbGlkOiAke2Vyci5tZXNzYWdlfWBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5PQkpFQ1RfRFJPUERPV046XG4gICAgICAgICAgICAgICAgLy8gQmVjYXVzZSBvbmx5IHZhbGlkIHZhbHVlcyBjYW4gYmUgc2VsZWN0ZWQsIHRoaXMgaXMgYWx3YXlzIHRydWUgd2hlbiBpdCBoYXMgYSB2YWx1ZVxuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBjYXNlIERlY29yYXRvclR5cGVzLkFSUkFZX1NUUklOR19BVVRPQ09NUExFVEVfQ0hJUFM6XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nQXV0b2NvbXBsZXRlQXJyYXk6IHN0cmluZ1tdID0gZW50aXR5W2tleV0gYXMgc3RyaW5nW107XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHN0eWxpc3RpYy9tYXgtbGVuXG4gICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nQXV0b2NvbXBsZXRlQXJyYXlNZXRhZGF0YTogQXV0b2NvbXBsZXRlU3RyaW5nQ2hpcHNBcnJheURlY29yYXRvckNvbmZpZ0ludGVybmFsID0gbWV0YWRhdGEgYXMgQXV0b2NvbXBsZXRlU3RyaW5nQ2hpcHNBcnJheURlY29yYXRvckNvbmZpZ0ludGVybmFsO1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzdHlsaXN0aWMvbWF4LWxlblxuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmdldEFycmF5U3RyaW5nQXV0b2NvbXBsZXRlQ2hpcHNWYWxpZGF0aW9uRXJyb3IoZW50aXR5LCBzdHJpbmdBdXRvY29tcGxldGVBcnJheU1ldGFkYXRhLCBzdHJpbmdBdXRvY29tcGxldGVBcnJheSk7XG4gICAgICAgICAgICBjYXNlIERlY29yYXRvclR5cGVzLkFSUkFZX1NUUklOR19DSElQUzpcbiAgICAgICAgICAgIGNhc2UgRGVjb3JhdG9yVHlwZXMuQVJSQVlfREFURTpcbiAgICAgICAgICAgIGNhc2UgRGVjb3JhdG9yVHlwZXMuQVJSQVlfREFURV9USU1FOlxuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5BUlJBWV9EQVRFX1JBTkdFOlxuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5BUlJBWTpcbiAgICAgICAgICAgICAgICBjb25zdCBlbnRpdHlBcnJheTogdW5rbm93bltdID0gZW50aXR5W2tleV0gYXMgdW5rbm93bltdO1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzdHlsaXN0aWMvbWF4LWxlblxuICAgICAgICAgICAgICAgIGNvbnN0IGFycmF5TWV0YWRhdGE6IEVudGl0eUFycmF5RGVjb3JhdG9yQ29uZmlnSW50ZXJuYWw8RW50aXR5VHlwZT4gPSBtZXRhZGF0YSBhcyBFbnRpdHlBcnJheURlY29yYXRvckNvbmZpZ0ludGVybmFsPEVudGl0eVR5cGU+O1xuICAgICAgICAgICAgICAgIGlmIChhcnJheU1ldGFkYXRhLnJlcXVpcmVkKGVudGl0eSkgJiYgIWVudGl0eUFycmF5Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ25vIGl0ZW1zIGluIGFycmF5J1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgRGVjb3JhdG9yVHlwZXMuREFURTpcbiAgICAgICAgICAgICAgICBjb25zdCBlbnRpdHlEYXRlOiBEYXRlID0gbmV3IERhdGUoZW50aXR5W2tleV0gYXMgRGF0ZSk7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0ZU1ldGFkYXRhOiBEZWZhdWx0RGF0ZURlY29yYXRvckNvbmZpZ0ludGVybmFsID0gbWV0YWRhdGEgYXMgRGVmYXVsdERhdGVEZWNvcmF0b3JDb25maWdJbnRlcm5hbDtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXREYXRlVmFsaWRhdGlvbkVycm9yKGVudGl0eURhdGUsIGRhdGVNZXRhZGF0YSk7XG4gICAgICAgICAgICBjYXNlIERlY29yYXRvclR5cGVzLkRBVEVfUkFOR0U6XG4gICAgICAgICAgICAgICAgY29uc3QgZW50aXR5RGF0ZVJhbmdlOiBEYXRlUmFuZ2UgPSBMb2Rhc2hVdGlsaXRpZXMuY2xvbmVEZWVwKGVudGl0eVtrZXldIGFzIERhdGVSYW5nZSk7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0ZVJhbmdlTWV0YWRhdGE6IERhdGVSYW5nZURhdGVEZWNvcmF0b3JDb25maWdJbnRlcm5hbCA9IG1ldGFkYXRhIGFzIERhdGVSYW5nZURhdGVEZWNvcmF0b3JDb25maWdJbnRlcm5hbDtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXREYXRlUmFuZ2VWYWxpZGF0aW9uRXJyb3IoZW50aXR5LCBlbnRpdHlEYXRlUmFuZ2UsIGRhdGVSYW5nZU1ldGFkYXRhKTtcbiAgICAgICAgICAgIGNhc2UgRGVjb3JhdG9yVHlwZXMuREFURV9USU1FOlxuICAgICAgICAgICAgICAgIGNvbnN0IGVudGl0eURhdGVUaW1lOiBEYXRlID0gbmV3IERhdGUoZW50aXR5W2tleV0gYXMgRGF0ZSk7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0ZVRpbWVNZXRhZGF0YTogRGF0ZVRpbWVEYXRlRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwgPSBtZXRhZGF0YSBhcyBEYXRlVGltZURhdGVEZWNvcmF0b3JDb25maWdJbnRlcm5hbDtcbiAgICAgICAgICAgICAgICBjb25zdCBoYXNUaW1lOiBib29sZWFuID0gUmVmbGVjdFV0aWxpdGllcy5oYXNNZXRhZGF0YShFbnRpdHlVdGlsaXRpZXMuVElNRV9LRVksIGVudGl0eSwga2V5KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXREYXRlVGltZVZhbGlkYXRpb25FcnJvcihlbnRpdHlEYXRlVGltZSwgZGF0ZVRpbWVNZXRhZGF0YSwgaGFzVGltZSk7XG4gICAgICAgICAgICBjYXNlIERlY29yYXRvclR5cGVzLkZJTEVfREVGQVVMVDpcbiAgICAgICAgICAgIGNhc2UgRGVjb3JhdG9yVHlwZXMuRklMRV9JTUFHRTpcbiAgICAgICAgICAgICAgICBjb25zdCBlbnRpdHlGaWxlOiBGaWxlRGF0YSB8IEZpbGVEYXRhW10gPSBlbnRpdHlba2V5XSBhcyBGaWxlRGF0YSB8IEZpbGVEYXRhW107XG4gICAgICAgICAgICAgICAgY29uc3QgZW50aXR5RmlsZU1ldGFkYXRhOiBEZWZhdWx0RmlsZURlY29yYXRvckNvbmZpZ0ludGVybmFsID0gbWV0YWRhdGEgYXMgRGVmYXVsdEZpbGVEZWNvcmF0b3JDb25maWdJbnRlcm5hbDtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRGaWxlRGF0YVZhbGlkYXRpb25FcnJvcihlbnRpdHlGaWxlLCBlbnRpdHlGaWxlTWV0YWRhdGEpO1xuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5SRUZFUkVOQ0VTX01BTlk6XG4gICAgICAgICAgICBjYXNlIERlY29yYXRvclR5cGVzLlJFRkVSRU5DRVNfT05FOlxuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5IQVNfTUFOWTpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgRGVjb3JhdG9yVHlwZXMuQ1VTVE9NOlxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB0eXBlc2NyaXB0L25vLWV4cGxpY2l0LWFueSwgc3R5bGlzdGljL21heC1sZW5cbiAgICAgICAgICAgICAgICBjb25zdCBjdXN0b21NZXRhZGF0YTogQ3VzdG9tRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWw8RW50aXR5VHlwZSwgYW55LCBhbnksIGFueT4gPSBtZXRhZGF0YSBhcyBDdXN0b21EZWNvcmF0b3JDb25maWdJbnRlcm5hbDxFbnRpdHlUeXBlLCBhbnksIGFueSwgYW55PjtcbiAgICAgICAgICAgICAgICBpZiAoIWN1c3RvbU1ldGFkYXRhLmlzVmFsaWQoZW50aXR5W2tleV0sIG9taXQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnaW52YWxpZCdcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IHZhbGlkYXRlIHRoZSBpbnB1dCBiZWNhdXNlIHRoZSBEZWNvcmF0b3JUeXBlICR7dHlwZX0gaXMgbm90IGtub3duYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBhc3luYyBnZXRBcnJheVN0cmluZ0F1dG9jb21wbGV0ZUNoaXBzVmFsaWRhdGlvbkVycm9yPEVudGl0eVR5cGUgZXh0ZW5kcyBCYXNlRW50aXR5VHlwZTxFbnRpdHlUeXBlPj4oXG4gICAgICAgIGVudGl0eTogRW50aXR5VHlwZSxcbiAgICAgICAgbWV0YWRhdGE6IEF1dG9jb21wbGV0ZVN0cmluZ0NoaXBzQXJyYXlEZWNvcmF0b3JDb25maWdJbnRlcm5hbCxcbiAgICAgICAgc3RyaW5nQXV0b2NvbXBsZXRlQXJyYXk6IHN0cmluZ1tdXG4gICAgKTogUHJvbWlzZTxWYWxpZGF0aW9uRXJyb3IgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgaWYgKG1ldGFkYXRhLnJlcXVpcmVkKGVudGl0eSkgJiYgIXN0cmluZ0F1dG9jb21wbGV0ZUFycmF5Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ25vIGl0ZW1zIGluIGFycmF5J1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWV0YWRhdGEucmVzdHJpY3RUb09wdGlvbnMgPT0gdHJ1ZSkge1xuICAgICAgICAgICAgY29uc3QgYXV0b2NvbXBsZXRlVmFsdWVzOiBzdHJpbmdbXSA9IGF3YWl0IG1ldGFkYXRhLmF1dG9jb21wbGV0ZVZhbHVlcyhlbnRpdHkpO1xuICAgICAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBzdHJpbmdBdXRvY29tcGxldGVBcnJheSkge1xuICAgICAgICAgICAgICAgIGlmICghYXV0b2NvbXBsZXRlVmFsdWVzLmluY2x1ZGVzKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYFRoZSB2YWx1ZSBcIiR7dmFsdWV9XCIgbmVlZHMgdG8gYmUgb25lIG9mIHRoZSBwcm92aWRlZCB2YWx1ZXNgXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0Qm9vbGVhblZhbGlkYXRpb25FcnJvcjxFbnRpdHlUeXBlIGV4dGVuZHMgQmFzZUVudGl0eVR5cGU8RW50aXR5VHlwZT4+KFxuICAgICAgICBlbnRpdHk6IEVudGl0eVR5cGUsXG4gICAgICAgIHZhbHVlOiBib29sZWFuLFxuICAgICAgICBtZXRhZGF0YTogVG9nZ2xlQm9vbGVhbkRlY29yYXRvckNvbmZpZ0ludGVybmFsXG4gICAgKTogVmFsaWRhdGlvbkVycm9yIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKG1ldGFkYXRhLnJlcXVpcmVkKGVudGl0eSkgJiYgIXZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnbm90IHNlbGVjdGVkJ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGdldFN0cmluZ1ZhbGlkYXRpb25FcnJvcih2YWx1ZTogc3RyaW5nLCBtZXRhZGF0YTogRGVmYXVsdFN0cmluZ0RlY29yYXRvckNvbmZpZ0ludGVybmFsKTogVmFsaWRhdGlvbkVycm9yIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKG1ldGFkYXRhLm1heExlbmd0aCAmJiB2YWx1ZS5sZW5ndGggPiBtZXRhZGF0YS5tYXhMZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBuZWVkcyB0byBiZSBzbWFsbGVyIHRoYW4gJHttZXRhZGF0YS5tYXhMZW5ndGh9IGNoYXJhY3RlcnNgXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZXRhZGF0YS5taW5MZW5ndGggJiYgdmFsdWUubGVuZ3RoIDwgbWV0YWRhdGEubWluTGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBgbmVlZHMgdG8gYmUgYmlnZ2VyIHRoYW4gJHttZXRhZGF0YS5taW5MZW5ndGh9IGNoYXJhY3RlcnNgXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZXRhZGF0YS5yZWdleCAmJiAhdmFsdWUubWF0Y2gobWV0YWRhdGEucmVnZXgpKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnaW52YWxpZCdcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBhc3luYyBnZXRBdXRvY29tcGxldGVTdHJpbmdWYWxpZGF0aW9uRXJyb3I8RW50aXR5VHlwZSBleHRlbmRzIEJhc2VFbnRpdHlUeXBlPEVudGl0eVR5cGU+PihcbiAgICAgICAgZW50aXR5OiBFbnRpdHlUeXBlLFxuICAgICAgICB2YWx1ZTogc3RyaW5nLFxuICAgICAgICBtZXRhZGF0YTogQXV0b2NvbXBsZXRlU3RyaW5nRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWxcbiAgICApOiBQcm9taXNlPFZhbGlkYXRpb25FcnJvciB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBpZiAobWV0YWRhdGEubWF4TGVuZ3RoICYmIHZhbHVlLmxlbmd0aCA+IG1ldGFkYXRhLm1heExlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYG5lZWRzIHRvIGJlIHNtYWxsZXIgdGhhbiAke21ldGFkYXRhLm1heExlbmd0aH0gY2hhcmFjdGVyc2BcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1ldGFkYXRhLm1pbkxlbmd0aCAmJiB2YWx1ZS5sZW5ndGggPCBtZXRhZGF0YS5taW5MZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBuZWVkcyB0byBiZSBiaWdnZXIgdGhhbiAke21ldGFkYXRhLm1pbkxlbmd0aH0gY2hhcmFjdGVyc2BcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1ldGFkYXRhLnJlZ2V4ICYmICF2YWx1ZS5tYXRjaChtZXRhZGF0YS5yZWdleCkpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdpbnZhbGlkJ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWV0YWRhdGEucmVzdHJpY3RUb09wdGlvbnMgPT0gdHJ1ZSAmJiAhKGF3YWl0IG1ldGFkYXRhLmF1dG9jb21wbGV0ZVZhbHVlcyhlbnRpdHkpKS5pbmNsdWRlcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdOZWVkcyB0byBiZSBvbmUgb2YgdGhlIHByb3ZpZGVkIHZhbHVlcydcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBnZXRUZXh0Ym94VmFsaWRhdGlvbkVycm9yKHZhbHVlOiBzdHJpbmcsIG1ldGFkYXRhOiBUZXh0Ym94U3RyaW5nRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwpOiBWYWxpZGF0aW9uRXJyb3IgfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAobWV0YWRhdGEubWF4TGVuZ3RoICYmIHZhbHVlLmxlbmd0aCA+IG1ldGFkYXRhLm1heExlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYG5lZWRzIHRvIGJlIHNtYWxsZXIgdGhhbiAke21ldGFkYXRhLm1heExlbmd0aH0gY2hhcmFjdGVyc2BcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1ldGFkYXRhLm1pbkxlbmd0aCAmJiB2YWx1ZS5sZW5ndGggPCBtZXRhZGF0YS5taW5MZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBuZWVkcyB0byBiZSBiaWdnZXIgdGhhbiAke21ldGFkYXRhLm1pbkxlbmd0aH0gY2hhcmFjdGVyc2BcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBnZXRQYXNzd29yZFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgdmFsdWU6IHN0cmluZyxcbiAgICAgICAgbWV0YWRhdGE6IFBhc3N3b3JkU3RyaW5nRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwsXG4gICAgICAgIGNvbmZpcm1QYXNzd29yZDogc3RyaW5nXG4gICAgKTogVmFsaWRhdGlvbkVycm9yIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKHZhbHVlICE9PSBjb25maXJtUGFzc3dvcmQpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdwYXNzd29yZHMgbmVlZCB0byBtYXRjaCdcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1ldGFkYXRhLm1heExlbmd0aCAmJiB2YWx1ZS5sZW5ndGggPiBtZXRhZGF0YS5tYXhMZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBuZWVkcyB0byBiZSBzbWFsbGVyIHRoYW4gJHttZXRhZGF0YS5tYXhMZW5ndGh9IGNoYXJhY3RlcnNgXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZXRhZGF0YS5taW5MZW5ndGggJiYgdmFsdWUubGVuZ3RoIDwgbWV0YWRhdGEubWluTGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBgbmVlZHMgdG8gYmUgYmlnZ2VyIHRoYW4gJHttZXRhZGF0YS5taW5MZW5ndGh9IGNoYXJhY3RlcnNgXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZXRhZGF0YS5yZWdleCAmJiAhdmFsdWUubWF0Y2gobWV0YWRhdGEucmVnZXgpKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnaW52YWxpZCdcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBnZXROdW1iZXJWYWxpZGF0aW9uRXJyb3IodmFsdWU6IG51bWJlciwgbWV0YWRhdGE6IERlZmF1bHROdW1iZXJEZWNvcmF0b3JDb25maWdJbnRlcm5hbCk6IFZhbGlkYXRpb25FcnJvciB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmIChtZXRhZGF0YS5tYXggJiYgdmFsdWUgPiBtZXRhZGF0YS5tYXgpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBuZWVkcyB0byBiZSBzbWFsbGVyIHRoYW4gJHttZXRhZGF0YS5tYXh9YFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWV0YWRhdGEubWluICYmIHZhbHVlIDwgbWV0YWRhdGEubWluKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBgbmVlZHMgdG8gYmUgYmlnZ2VyIHRoYW4gJHttZXRhZGF0YS5taW59YFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGdldERhdGVWYWxpZGF0aW9uRXJyb3IodmFsdWU6IERhdGUsIG1ldGFkYXRhOiBEZWZhdWx0RGF0ZURlY29yYXRvckNvbmZpZ0ludGVybmFsKTogVmFsaWRhdGlvbkVycm9yIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKG1ldGFkYXRhLm1pbiAmJiB2YWx1ZS5nZXRUaW1lKCkgPCBtZXRhZGF0YS5taW4odmFsdWUpLmdldFRpbWUoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYG5lZWRzIHRvIGJlIGFmdGVyICR7Zm9ybWF0RGF0ZShtZXRhZGF0YS5taW4odmFsdWUpKX1gXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZXRhZGF0YS5tYXggJiYgdmFsdWUuZ2V0VGltZSgpID4gbWV0YWRhdGEubWF4KHZhbHVlKS5nZXRUaW1lKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBuZWVkcyB0byBiZSBiZWZvcmUgJHtmb3JtYXREYXRlKG1ldGFkYXRhLm1heCh2YWx1ZSkpfWBcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1ldGFkYXRhLmZpbHRlciAmJiAhbWV0YWRhdGEuZmlsdGVyKHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ2ludmFsaWQnXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHNvbmFyL2NvZ25pdGl2ZS1jb21wbGV4aXR5XG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0RGF0ZVJhbmdlVmFsaWRhdGlvbkVycm9yPEVudGl0eVR5cGUgZXh0ZW5kcyBCYXNlRW50aXR5VHlwZTxFbnRpdHlUeXBlPj4oXG4gICAgICAgIGVudGl0eTogRW50aXR5VHlwZSxcbiAgICAgICAgdmFsdWU6IFBhcnRpYWw8RGF0ZVJhbmdlPixcbiAgICAgICAgbWV0YWRhdGE6IERhdGVSYW5nZURhdGVEZWNvcmF0b3JDb25maWdJbnRlcm5hbFxuICAgICk6IFZhbGlkYXRpb25FcnJvciB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmIChtZXRhZGF0YS5yZXF1aXJlZChlbnRpdHkpICYmICh2YWx1ZS5zdGFydCA9PSB1bmRlZmluZWQgfHwgdmFsdWUuZW5kID09IHVuZGVmaW5lZCB8fCB2YWx1ZS52YWx1ZXMgPT0gdW5kZWZpbmVkKSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ3JlcXVpcmVkJ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUuc3RhcnQpIHtcbiAgICAgICAgICAgIHZhbHVlLnN0YXJ0ID0gbmV3IERhdGUodmFsdWUuc3RhcnQpO1xuICAgICAgICAgICAgaWYgKG1ldGFkYXRhLm1pblN0YXJ0ICYmIHZhbHVlLnN0YXJ0LmdldFRpbWUoKSA8IG1ldGFkYXRhLm1pblN0YXJ0KHZhbHVlLnN0YXJ0KS5nZXRUaW1lKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBzdGFydCBkYXRlIG5lZWRzIHRvIGJlIGFmdGVyICR7Zm9ybWF0RGF0ZShtZXRhZGF0YS5taW5TdGFydCh2YWx1ZS5zdGFydCkpfWBcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1ldGFkYXRhLm1heFN0YXJ0ICYmIHZhbHVlLnN0YXJ0LmdldFRpbWUoKSA+IG1ldGFkYXRhLm1heFN0YXJ0KHZhbHVlLnN0YXJ0KS5nZXRUaW1lKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBzdGFydCBkYXRlIG5lZWRzIHRvIGJlIGJlZm9yZSAke2Zvcm1hdERhdGUobWV0YWRhdGEubWF4U3RhcnQodmFsdWUuc3RhcnQpKX1gXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtZXRhZGF0YS5maWx0ZXIgJiYgIW1ldGFkYXRhLmZpbHRlcih2YWx1ZS5zdGFydCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdzdGFydCBkYXRlIGludmFsaWQnXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWx1ZS5lbmQpIHtcbiAgICAgICAgICAgIHZhbHVlLmVuZCA9IG5ldyBEYXRlKHZhbHVlLmVuZCk7XG4gICAgICAgICAgICBpZiAobWV0YWRhdGEubWluRW5kICYmIHZhbHVlLmVuZC5nZXRUaW1lKCkgPCBtZXRhZGF0YS5taW5FbmQodmFsdWUuZW5kKS5nZXRUaW1lKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBlbmQgZGF0ZSBuZWVkcyB0byBiZSBhZnRlciAke2Zvcm1hdERhdGUobWV0YWRhdGEubWluRW5kKHZhbHVlLmVuZCkpfWBcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1ldGFkYXRhLm1heEVuZCAmJiB2YWx1ZS5lbmQuZ2V0VGltZSgpID4gbWV0YWRhdGEubWF4RW5kKHZhbHVlLmVuZCkuZ2V0VGltZSgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgZW5kIGRhdGUgbmVlZHMgdG8gYmUgYmVmb3JlICR7Zm9ybWF0RGF0ZShtZXRhZGF0YS5tYXhFbmQodmFsdWUuZW5kKSl9YFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWV0YWRhdGEuZmlsdGVyICYmICFtZXRhZGF0YS5maWx0ZXIodmFsdWUuZW5kKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ2VuZCBkYXRlIGludmFsaWQnXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtZXRhZGF0YS5maWx0ZXIgJiYgdmFsdWUudmFsdWVzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGRhdGUgb2YgdmFsdWUudmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFtZXRhZGF0YS5maWx0ZXIoZGF0ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGB2YWx1ZSAke2Zvcm1hdERhdGUoZGF0ZSl9IGludmFsaWRgXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHNvbmFyL2NvZ25pdGl2ZS1jb21wbGV4aXR5XG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0RGF0ZVRpbWVWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgIHZhbHVlOiBEYXRlLFxuICAgICAgICBtZXRhZGF0YTogRGF0ZVRpbWVEYXRlRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwsXG4gICAgICAgIGhhc1RpbWU6IGJvb2xlYW5cbiAgICApOiBWYWxpZGF0aW9uRXJyb3IgfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAoIWhhc1RpbWUpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdubyB0aW1lJ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWV0YWRhdGEubWluRGF0ZSAmJiB2YWx1ZS5nZXRUaW1lKCkgPCBtZXRhZGF0YS5taW5EYXRlKHZhbHVlKS5nZXRUaW1lKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBkYXRlIG5lZWRzIHRvIGJlIGFmdGVyICR7Zm9ybWF0RGF0ZShtZXRhZGF0YS5taW5EYXRlKHZhbHVlKSl9YFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWV0YWRhdGEubWF4RGF0ZSAmJiB2YWx1ZS5nZXRUaW1lKCkgPiBtZXRhZGF0YS5tYXhEYXRlKHZhbHVlKS5nZXRUaW1lKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBkYXRlIG5lZWRzIHRvIGJlIGJlZm9yZSAke2Zvcm1hdERhdGUobWV0YWRhdGEubWF4RGF0ZSh2YWx1ZSkpfWBcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1ldGFkYXRhLmZpbHRlckRhdGUgJiYgIW1ldGFkYXRhLmZpbHRlckRhdGUodmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnaW52YWxpZCBkYXRlJ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0aW1lOiBUaW1lID0gRGF0ZVV0aWxpdGllcy5nZXRUaW1lRnJvbURhdGUodmFsdWUpIGFzIFRpbWU7XG4gICAgICAgIGlmIChtZXRhZGF0YS5taW5UaW1lKSB7XG4gICAgICAgICAgICBjb25zdCBtaW5UaW1lOiBUaW1lID0gbWV0YWRhdGEubWluVGltZSh2YWx1ZSk7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgICAgICAgdGltZS5ob3VycyA+IG1pblRpbWUuaG91cnNcbiAgICAgICAgICAgICAgICAgICAgfHwgKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGltZS5ob3VycyA9PT0gbWluVGltZS5ob3Vyc1xuICAgICAgICAgICAgICAgICAgICAgICAgJiYgdGltZS5taW51dGVzID49IG1pblRpbWUubWludXRlc1xuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgdGltZSBuZWVkcyB0byBiZSBhZnRlciAke21pblRpbWUuaG91cnN9OiR7bWluVGltZS5taW51dGVzfWBcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChtZXRhZGF0YS5tYXhUaW1lKSB7XG4gICAgICAgICAgICBjb25zdCBtYXhUaW1lOiBUaW1lID0gbWV0YWRhdGEubWF4VGltZSh2YWx1ZSk7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgICAgICAgdGltZS5ob3VycyA8IG1heFRpbWUuaG91cnNcbiAgICAgICAgICAgICAgICAgICAgfHwgKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGltZS5ob3VycyA9PT0gbWF4VGltZS5ob3Vyc1xuICAgICAgICAgICAgICAgICAgICAgICAgJiYgdGltZS5taW51dGVzIDw9IG1heFRpbWUubWludXRlc1xuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgdGltZSBuZWVkcyB0byBiZSBiZWZvcmUgJHttYXhUaW1lLmhvdXJzfToke21heFRpbWUubWludXRlc31gXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobWV0YWRhdGEuZmlsdGVyVGltZSAmJiAhbWV0YWRhdGEuZmlsdGVyVGltZSh0aW1lKSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ2ludmFsaWQgdGltZSdcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBnZXRGaWxlRGF0YVZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgdmFsdWU6IEZpbGVEYXRhIHwgRmlsZURhdGFbXSxcbiAgICAgICAgbWV0YWRhdGE6IERlZmF1bHRGaWxlRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWxcbiAgICApOiBWYWxpZGF0aW9uRXJyb3IgfCB1bmRlZmluZWQge1xuICAgICAgICBjb25zdCBmaWxlczogRmlsZURhdGFbXSA9IG1ldGFkYXRhLm11bHRpcGxlID8gdmFsdWUgYXMgRmlsZURhdGFbXSA6IFt2YWx1ZSBhcyBGaWxlRGF0YV07XG4gICAgICAgIGxldCBmaWxlU2l6ZVRvdGFsOiBudW1iZXIgPSAwO1xuICAgICAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICAgICAgICAgIGlmICghZmlsZS5uYW1lIHx8ICghZmlsZS5maWxlICYmICFmaWxlLnVybCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdpbnZhbGlkJ1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIUZpbGVVdGlsaXRpZXMuaXNNaW1lVHlwZVZhbGlkKGZpbGUudHlwZSwgbWV0YWRhdGEuYWxsb3dlZE1pbWVUeXBlcykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBtaW1ldHlwZSBuZWVkcyB0byBiZSBvbmUgb2YgJHttZXRhZGF0YS5hbGxvd2VkTWltZVR5cGVzfWBcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKEZpbGVVdGlsaXRpZXMudHJhbnNmb3JtVG9NZWdhQnl0ZXMoZmlsZS5zaXplLCAnQicpID4gbWV0YWRhdGEubWF4U2l6ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYGZpbGUgbmVlZHMgdG8gYmUgc21hbGxlciB0aGFuICR7bWV0YWRhdGEubWF4U2l6ZX0gTUJgXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbGVTaXplVG90YWwgKz0gZmlsZS5zaXplO1xuICAgICAgICAgICAgaWYgKEZpbGVVdGlsaXRpZXMudHJhbnNmb3JtVG9NZWdhQnl0ZXMoZmlsZVNpemVUb3RhbCwgJ0InKSA+IG1ldGFkYXRhLm1heFNpemVUb3RhbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYFRoZSBzaXplIG9mIGFsbCBmaWxlcyBjb21iaW5lZCBuZWVkcyB0byBiZSBzbWFsbGVyIHRoYW4gJHttZXRhZGF0YS5tYXhTaXplVG90YWx9YFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG5mdW5jdGlvbiBwYWRUbzJEaWdpdHMobnVtOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiBudW0udG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuZnVuY3Rpb24gZm9ybWF0RGF0ZShkYXRlOiBEYXRlKTogc3RyaW5nIHtcbiAgICByZXR1cm4gW1xuICAgICAgICBwYWRUbzJEaWdpdHMoZGF0ZS5nZXREYXRlKCkpLFxuICAgICAgICBwYWRUbzJEaWdpdHMoZGF0ZS5nZXRNb250aCgpICsgMSksXG4gICAgICAgIGRhdGUuZ2V0RnVsbFllYXIoKVxuICAgIF0uam9pbignLycpO1xufSJdfQ==
|
|
523
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi51dGlsaXRpZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbWF0ZXJpYWwtZW50aXR5L3NyYy91dGlsaXRpZXMvdmFsaWRhdGlvbi51dGlsaXRpZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLGFBQWEsRUFBUSxNQUFNLGtCQUFrQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFHakQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBV3pFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQWlCdEU7O0dBRUc7QUFDSCxNQUFNLE9BQWdCLG1CQUFtQjtJQUNyQzs7Ozs7OztPQU9HO0lBQ0gsTUFBTSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQ3RCLE1BQWtCLEVBQ2xCLFFBQTZCLEVBQzdCLElBQTBCO1FBRTFCLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztJQUN2RixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsTUFBTSxDQUFDLEtBQUssQ0FBQyx5QkFBeUIsQ0FDbEMsTUFBa0IsRUFDbEIsUUFBNkIsRUFDN0IsSUFBMEI7UUFFMUIsTUFBTSxHQUFHLEdBQXNCLEVBQUUsQ0FBQztRQUNsQyxLQUFLLE1BQU0sR0FBRyxJQUFJLGVBQWUsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDekQsTUFBTSxHQUFHLEdBQWdDLE1BQU0sSUFBSSxDQUFDLDBC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QUVELCtDQUErQztBQUMvQyxTQUFTLFlBQVksQ0FBQyxHQUFXO0lBQzdCLE9BQU8sR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDM0MsQ0FBQztBQUVELCtDQUErQztBQUMvQyxTQUFTLFVBQVUsQ0FBQyxJQUFVO0lBQzFCLE9BQU87UUFDSCxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzVCLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxXQUFXLEVBQUU7S0FDckIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVudmlyb25tZW50SW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgRGF0ZVV0aWxpdGllcywgVGltZSB9IGZyb20gJy4vZGF0ZS51dGlsaXRpZXMnO1xuaW1wb3J0IHsgRW50aXR5VXRpbGl0aWVzIH0gZnJvbSAnLi9lbnRpdHkudXRpbGl0aWVzJztcbmltcG9ydCB7IEZpbGVVdGlsaXRpZXMgfSBmcm9tICcuL2ZpbGUudXRpbGl0aWVzJztcbmltcG9ydCB7IEJhc2VFbnRpdHlUeXBlIH0gZnJvbSAnLi4vY2xhc3Nlcy9lbnRpdHkubW9kZWwnO1xuaW1wb3J0IHsgQXV0b2NvbXBsZXRlU3RyaW5nQ2hpcHNBcnJheURlY29yYXRvckNvbmZpZ0ludGVybmFsLCBFbnRpdHlBcnJheURlY29yYXRvckNvbmZpZ0ludGVybmFsIH0gZnJvbSAnLi4vZGVjb3JhdG9ycy9hcnJheS9hcnJheS1kZWNvcmF0b3ItaW50ZXJuYWwuZGF0YSc7XG5pbXBvcnQgeyBEZWNvcmF0b3JUeXBlcyB9IGZyb20gJy4uL2RlY29yYXRvcnMvYmFzZS9kZWNvcmF0b3ItdHlwZXMuZW51bSc7XG5pbXBvcnQgeyBQcm9wZXJ0eURlY29yYXRvckNvbmZpZ0ludGVybmFsIH0gZnJvbSAnLi4vZGVjb3JhdG9ycy9iYXNlL3Byb3BlcnR5LWRlY29yYXRvci1pbnRlcm5hbC5kYXRhJztcbmltcG9ydCB7IFRvZ2dsZUJvb2xlYW5EZWNvcmF0b3JDb25maWdJbnRlcm5hbCB9IGZyb20gJy4uL2RlY29yYXRvcnMvYm9vbGVhbi9ib29sZWFuLWRlY29yYXRvci1pbnRlcm5hbC5kYXRhJztcbmltcG9ydCB7IEN1c3RvbURlY29yYXRvckNvbmZpZ0ludGVybmFsIH0gZnJvbSAnLi4vZGVjb3JhdG9ycy9jdXN0b20vY3VzdG9tLWRlY29yYXRvci1pbnRlcm5hbC5kYXRhJztcbmltcG9ydCB7IERhdGVSYW5nZURhdGVEZWNvcmF0b3JDb25maWdJbnRlcm5hbCwgRGF0ZVRpbWVEYXRlRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwsIERlZmF1bHREYXRlRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwgfSBmcm9tICcuLi9kZWNvcmF0b3JzL2RhdGUvZGF0ZS1kZWNvcmF0b3ItaW50ZXJuYWwuZGF0YSc7XG5pbXBvcnQgeyBEYXRlUmFuZ2UgfSBmcm9tICcuLi9kZWNvcmF0b3JzL2RhdGUvZGF0ZS1kZWNvcmF0b3IuZGF0YSc7XG5pbXBvcnQgeyBEZWZhdWx0RmlsZURlY29yYXRvckNvbmZpZ0ludGVybmFsIH0gZnJvbSAnLi4vZGVjb3JhdG9ycy9maWxlL2ZpbGUtZGVjb3JhdG9yLWludGVybmFsLmRhdGEnO1xuaW1wb3J0IHsgRmlsZURhdGEgfSBmcm9tICcuLi9kZWNvcmF0b3JzL2ZpbGUvZmlsZS1kZWNvcmF0b3IuZGF0YSc7XG5pbXBvcnQgeyBEZWZhdWx0TnVtYmVyRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwgfSBmcm9tICcuLi9kZWNvcmF0b3JzL251bWJlci9udW1iZXItZGVjb3JhdG9yLWludGVybmFsLmRhdGEnO1xuaW1wb3J0IHsgRGVmYXVsdE9iamVjdERlY29yYXRvckNvbmZpZ0ludGVybmFsIH0gZnJvbSAnLi4vZGVjb3JhdG9ycy9vYmplY3Qvb2JqZWN0LWRlY29yYXRvci1pbnRlcm5hbC5kYXRhJztcbmltcG9ydCB7IEF1dG9jb21wbGV0ZVN0cmluZ0RlY29yYXRvckNvbmZpZ0ludGVybmFsLCBEZWZhdWx0U3RyaW5nRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwsIFBhc3N3b3JkU3RyaW5nRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwsIFRleHRib3hTdHJpbmdEZWNvcmF0b3JDb25maWdJbnRlcm5hbCB9IGZyb20gJy4uL2RlY29yYXRvcnMvc3RyaW5nL3N0cmluZy1kZWNvcmF0b3ItaW50ZXJuYWwuZGF0YSc7XG5pbXBvcnQgeyBMb2Rhc2hVdGlsaXRpZXMgfSBmcm9tICcuLi9lbmNhcHN1bGF0aW9uL2xvZGFzaC51dGlsaXRpZXMnO1xuaW1wb3J0IHsgUmVmbGVjdFV0aWxpdGllcyB9IGZyb20gJy4uL2VuY2Fwc3VsYXRpb24vcmVmbGVjdC51dGlsaXRpZXMnO1xuXG4vKipcbiAqIEEgdmFsaWRhdGlvbiBlcnJvciByZXBvcnRlZCBieSB0aGUgdmFsaWRhdGlvbiB1dGlsaXRpZXMuXG4gKiBDb25zaXN0cyBvZiB0aGUgcHJvcGVydHkgbmFtZSB3aGVyZSB0aGUgZXJyb3Igb3JpZ2luYXRlZCBmcm9tIGFuZCBhIG1lc3NhZ2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmFsaWRhdGlvbkVycm9yIHtcbiAgICAvKipcbiAgICAgKiBUaGUgcHJvcGVydHkgbmFtZSBvbiB3aGljaCB0aGUgZXJyb3Igb2NjdXJyZWQuIFRoaXMgaXMgdGhlIGRpc3BsYXlOYW1lIHZhbHVlLlxuICAgICAqL1xuICAgIHByb3BlcnR5OiBzdHJpbmcsXG4gICAgLyoqXG4gICAgICogVGhlIHZhbGlkYXRpb24gZXJyb3IgbWVzc2FnZS5cbiAgICAgKi9cbiAgICBtZXNzYWdlOiBzdHJpbmdcbn1cblxuLyoqXG4gKiBDb250YWlucyBIZWxwZXJNZXRob2RzIGFyb3VuZCBoYW5kbGluZyBWYWxpZGF0aW9uIG9mIGVudGl0aWVzIGFuZCBwcm9wZXJ0aWVzLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgVmFsaWRhdGlvblV0aWxpdGllcyB7XG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIHRoZSB2YWx1ZXMgb24gYW4gZW50aXR5IGFyZSB2YWxpZC5cbiAgICAgKiBBbHNvIGNoZWNrcyBhbGwgdGhlIHZhbGlkYXRvcnMgZ2l2ZW4gYnkgdGhlIG1ldGFkYXRhIChcInJlcXVpcmVkXCIsIFwibWF4TGVuZ3RoXCIgZXRjLikuXG4gICAgICogQHBhcmFtIGVudGl0eSAtIFRoZSBlbnRpdHkgdG8gdmFsaWRhdGUuXG4gICAgICogQHBhcmFtIGluamVjdG9yIC0gQW4gYW5ndWxhciBlbnZpcm9ubWVudCBpbmplY3Rvci5cbiAgICAgKiBAcGFyYW0gb21pdCAtIFdoZXRoZXIgdG8gY2hlY2sgZm9yIGNyZWF0aW5nIG9yIGVkaXRpbmcgdmFsaWRpdHkuXG4gICAgICogQHJldHVybnMgV2hldGhlciBvciBub3QgdGhlIGVudGl0eSBpcyB2YWxpZC5cbiAgICAgKi9cbiAgICBzdGF0aWMgYXN5bmMgaXNFbnRpdHlWYWxpZDxFbnRpdHlUeXBlIGV4dGVuZHMgQmFzZUVudGl0eVR5cGU8RW50aXR5VHlwZT4+KFxuICAgICAgICBlbnRpdHk6IEVudGl0eVR5cGUsXG4gICAgICAgIGluamVjdG9yOiBFbnZpcm9ubWVudEluamVjdG9yLFxuICAgICAgICBvbWl0PzogJ2NyZWF0ZScgfCAndXBkYXRlJ1xuICAgICk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gKGF3YWl0IHRoaXMuZ2V0RW50aXR5VmFsaWRhdGlvbkVycm9ycyhlbnRpdHksIGluamVjdG9yLCBvbWl0KSkubGVuZ3RoID09PSAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgYWxsIHZhbGlkYXRpb24gZXJyb3JzIG9uIHRoZSBnaXZlbiBlbnRpdHkuXG4gICAgICogQHBhcmFtIGVudGl0eSAtIFRoZSBlbnRpdHkgdG8gdmFsaWRhdGUuXG4gICAgICogQHBhcmFtIGluamVjdG9yIC0gQW4gYW5ndWxhciBlbnZpcm9ubWVudCBpbmplY3Rvci5cbiAgICAgKiBAcGFyYW0gb21pdCAtIFdoYXQga2V5cyBub3QgdG8gY2hlY2suIEFuIGVtcHR5IHZhbHVlIG1lYW5zIG5vIGtleXMgYXJlIG9taXR0ZWQuXG4gICAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgdmFsaWRhdGlvbiBlcnJvcnMgb24gdGhlIHByb3ZpZGVkIGVudGl0eS5cbiAgICAgKi9cbiAgICBzdGF0aWMgYXN5bmMgZ2V0RW50aXR5VmFsaWRhdGlvbkVycm9yczxFbnRpdHlUeXBlIGV4dGVuZHMgQmFzZUVudGl0eVR5cGU8RW50aXR5VHlwZT4+KFxuICAgICAgICBlbnRpdHk6IEVudGl0eVR5cGUsXG4gICAgICAgIGluamVjdG9yOiBFbnZpcm9ubWVudEluamVjdG9yLFxuICAgICAgICBvbWl0PzogJ2NyZWF0ZScgfCAndXBkYXRlJ1xuICAgICk6IFByb21pc2U8VmFsaWRhdGlvbkVycm9yW10+IHtcbiAgICAgICAgY29uc3QgcmVzOiBWYWxpZGF0aW9uRXJyb3JbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBFbnRpdHlVdGlsaXRpZXMua2V5c09mKGVudGl0eSwgaW5qZWN0b3IpKSB7XG4gICAgICAgICAgICBjb25zdCBlcnI6IFZhbGlkYXRpb25FcnJvciB8IHVuZGVmaW5lZCA9IGF3YWl0IHRoaXMuZ2V0UHJvcGVydHlWYWxpZGF0aW9uRXJyb3IoZW50aXR5LCBrZXksIG9taXQpO1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIHJlcy5wdXNoKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICAvLyAvKipcbiAgICAvLyAgKiBDaGVja3MgaWYgYSBzaW5nbGUgcHJvcGVydHkgdmFsdWUgaXMgdmFsaWQuXG4gICAgLy8gICpcbiAgICAvLyAgKiBAcGFyYW0gZW50aXR5IC0gVGhlIGVudGl0eSB3aGVyZSB0aGUgcHJvcGVydHkgaXMgZnJvbS5cbiAgICAvLyAgKiBAcGFyYW0ga2V5IC0gVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5LlxuICAgIC8vICAqIEBwYXJhbSBvbWl0IC0gV2hldGhlciB0byBjaGVjayBpZiB0aGUgZ2l2ZW4gZW50aXR5IGlzIHZhbGlkIGZvciBjcmVhdGlvbiBvciB1cGRhdGluZy5cbiAgICAvLyAgKiBAcmV0dXJucyBXaGV0aGVyIG9yIG5vdCB0aGUgcHJvcGVydHkgdmFsdWUgaXMgdmFsaWQuXG4gICAgLy8gICogQHRocm93cyBUaHJvd3Mgd2hlbiBpdCBleHRyYWN0cyBhbiB1bmtub3duIG1ldGFkYXRhIHR5cGUuXG4gICAgLy8gICovXG4gICAgLy8gc3RhdGljIGlzUHJvcGVydHlWYWxpZDxFbnRpdHlUeXBlIGV4dGVuZHMgQmFzZUVudGl0eVR5cGU8RW50aXR5VHlwZT4+KFxuICAgIC8vICAgICBlbnRpdHk6IEVudGl0eVR5cGUsXG4gICAgLy8gICAgIGtleToga2V5b2YgRW50aXR5VHlwZSxcbiAgICAvLyAgICAgb21pdD86ICdjcmVhdGUnIHwgJ3VwZGF0ZSdcbiAgICAvLyApOiBib29sZWFuIHtcbiAgICAvLyAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWxpZGF0aW9uRXJyb3IoZW50aXR5LCBrZXksIG9taXQpID09IG51bGw7XG4gICAgLy8gfVxuXG4gICAgLyoqXG4gICAgICogVmFsaWRhdGVzIHRoZSBwcm9wZXJ0eSBvbiB0aGUgZ2l2ZW4gZW50aXR5IHdpdGggdGhlIGdpdmVuIGtleS5cbiAgICAgKiBAcGFyYW0gZW50aXR5IC0gVGhlIGVudGl0eSBvbiB3aGljaCB0aGUgcHJvcGVydHkgdG8gY2hlY2sgaXMuXG4gICAgICogQHBhcmFtIGtleSAtIFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIHZhbGlkYXRlLlxuICAgICAqIEBwYXJhbSBvbWl0IC0gV2hhdCBrZXlzIG5vdCB0byBjaGVjay4gQW4gZW1wdHkgdmFsdWUgbWVhbnMgbm8ga2V5cyBhcmUgb21pdHRlZC5cbiAgICAgKiBAcmV0dXJucyBBIHZhbGlkYXRpb24gZXJyb3Igd2hlbiB0aGUgcHJvcGVydHkgaXMgbm90IHZhbGlkLCB1bmRlZmluZWQgb3RoZXJ3aXNlLlxuICAgICAqIEB0aHJvd3MgV2hlbiB0aGUgdHlwZSBvZiB0aGUgcHJvcGVydHkgaXMgbm90IGtub3duLlxuICAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzb25hci9jb2duaXRpdmUtY29tcGxleGl0eVxuICAgIHN0YXRpYyBhc3luYyBnZXRQcm9wZXJ0eVZhbGlkYXRpb25FcnJvcjxFbnRpdHlUeXBlIGV4dGVuZHMgQmFzZUVudGl0eVR5cGU8RW50aXR5VHlwZT4+KFxuICAgICAgICBlbnRpdHk6IEVudGl0eVR5cGUsXG4gICAgICAgIGtleToga2V5b2YgRW50aXR5VHlwZSxcbiAgICAgICAgb21pdD86ICdjcmVhdGUnIHwgJ3VwZGF0ZSdcbiAgICApOiBQcm9taXNlPFZhbGlkYXRpb25FcnJvciB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBjb25zdCB0eXBlOiBEZWNvcmF0b3JUeXBlcyB8IHVuZGVmaW5lZCA9IEVudGl0eVV0aWxpdGllcy5nZXRQcm9wZXJ0eVR5cGUoZW50aXR5LCBrZXkpO1xuICAgICAgICBpZiAodHlwZSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWV0YWRhdGE6IFByb3BlcnR5RGVjb3JhdG9yQ29uZmlnSW50ZXJuYWw8dW5rbm93bj4gfCB1bmRlZmluZWQgPSBFbnRpdHlVdGlsaXRpZXMuZ2V0UHJvcGVydHlNZXRhZGF0YShlbnRpdHksIGtleSwgdHlwZSk7XG5cbiAgICAgICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICAgICAgaWYgKG1ldGFkYXRhID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtZXRhZGF0YS5vbWl0Rm9yQ3JlYXRlICYmIG9taXQgPT09ICdjcmVhdGUnKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZXRhZGF0YS5vbWl0Rm9yVXBkYXRlICYmIG9taXQgPT09ICd1cGRhdGUnKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlICE9PSBEZWNvcmF0b3JUeXBlcy5IQVNfTUFOWSAmJiBtZXRhZGF0YS5yZXF1aXJlZChlbnRpdHkpICYmIChlbnRpdHlba2V5XSA9PSB1bmRlZmluZWQgfHwgZW50aXR5W2tleV0gPT09ICcnKSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ3JlcXVpcmVkJ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW1ldGFkYXRhLnJlcXVpcmVkKGVudGl0eSkgJiYgKGVudGl0eVtrZXldID09IHVuZGVmaW5lZCB8fCBlbnRpdHlba2V5XSA9PT0gJycpKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5CT09MRUFOX0RST1BET1dOOlxuICAgICAgICAgICAgICAgIC8vIEJlY2F1c2Ugb25seSB2YWxpZCB2YWx1ZXMgY2FuIGJlIHNlbGVjdGVkLCB0aGlzIGlzIGFsd2F5cyB0cnVlIHdoZW4gaXQgaGFzIGEgdmFsdWVcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5CT09MRUFOX0NIRUNLQk9YOlxuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5CT09MRUFOX1RPR0dMRTpcbiAgICAgICAgICAgICAgICBjb25zdCBlbnRpdHlCb29sZWFuOiBib29sZWFuID0gZW50aXR5W2tleV0gYXMgYm9vbGVhbjtcbiAgICAgICAgICAgICAgICBjb25zdCBib29sZWFuTWV0YWRhdGE6IFRvZ2dsZUJvb2xlYW5EZWNvcmF0b3JDb25maWdJbnRlcm5hbCA9IG1ldGFkYXRhIGFzIFRvZ2dsZUJvb2xlYW5EZWNvcmF0b3JDb25maWdJbnRlcm5hbDtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRCb29sZWFuVmFsaWRhdGlvbkVycm9yKGVudGl0eSwgZW50aXR5Qm9vbGVhbiwgYm9vbGVhbk1ldGFkYXRhKTtcbiAgICAgICAgICAgIGNhc2UgRGVjb3JhdG9yVHlwZXMuU1RSSU5HX0RST1BET1dOOlxuICAgICAgICAgICAgICAgIC8vIEJlY2F1c2Ugb25seSB2YWxpZCB2YWx1ZXMgY2FuIGJlIHNlbGVjdGVkLCB0aGlzIGlzIGFsd2F5cyB0cnVlIHdoZW4gaXQgaGFzIGEgdmFsdWVcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5TVFJJTkc6XG4gICAgICAgICAgICAgICAgY29uc3QgZW50aXR5U3RyaW5nOiBzdHJpbmcgPSBlbnRpdHlba2V5XSBhcyBzdHJpbmc7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nTWV0YWRhdGE6IERlZmF1bHRTdHJpbmdEZWNvcmF0b3JDb25maWdJbnRlcm5hbCA9IG1ldGFkYXRhIGFzIERlZmF1bHRTdHJpbmdEZWNvcmF0b3JDb25maWdJbnRlcm5hbDtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmdWYWxpZGF0aW9uRXJyb3IoZW50aXR5U3RyaW5nLCBzdHJpbmdNZXRhZGF0YSk7XG4gICAgICAgICAgICBjYXNlIERlY29yYXRvclR5cGVzLlNUUklOR19BVVRPQ09NUExFVEU6XG4gICAgICAgICAgICAgICAgY29uc3QgZW50aXR5QXV0b2NvbXBsZXRlU3RyaW5nOiBzdHJpbmcgPSBlbnRpdHlba2V5XSBhcyBzdHJpbmc7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHN0eWxpc3RpYy9tYXgtbGVuXG4gICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nQXV0b2NvbXBsZXRlTWV0YWRhdGE6IEF1dG9jb21wbGV0ZVN0cmluZ0RlY29yYXRvckNvbmZpZ0ludGVybmFsID0gbWV0YWRhdGEgYXMgQXV0b2NvbXBsZXRlU3RyaW5nRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWw7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QXV0b2NvbXBsZXRlU3RyaW5nVmFsaWRhdGlvbkVycm9yKGVudGl0eSwgZW50aXR5QXV0b2NvbXBsZXRlU3RyaW5nLCBzdHJpbmdBdXRvY29tcGxldGVNZXRhZGF0YSk7XG4gICAgICAgICAgICBjYXNlIERlY29yYXRvclR5cGVzLlNUUklOR19URVhUQk9YOlxuICAgICAgICAgICAgICAgIGNvbnN0IGVudGl0eVRleHRib3g6IHN0cmluZyA9IGVudGl0eVtrZXldIGFzIHN0cmluZztcbiAgICAgICAgICAgICAgICBjb25zdCB0ZXh0Ym94TWV0YWRhdGE6IFRleHRib3hTdHJpbmdEZWNvcmF0b3JDb25maWdJbnRlcm5hbCA9IG1ldGFkYXRhIGFzIFRleHRib3hTdHJpbmdEZWNvcmF0b3JDb25maWdJbnRlcm5hbDtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRUZXh0Ym94VmFsaWRhdGlvbkVycm9yKGVudGl0eVRleHRib3gsIHRleHRib3hNZXRhZGF0YSk7XG4gICAgICAgICAgICBjYXNlIERlY29yYXRvclR5cGVzLlNUUklOR19QQVNTV09SRDpcbiAgICAgICAgICAgICAgICBjb25zdCBlbnRpdHlQYXNzd29yZDogc3RyaW5nID0gZW50aXR5W2tleV0gYXMgc3RyaW5nO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhc3N3b3JkTWV0YWRhdGE6IFBhc3N3b3JkU3RyaW5nRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwgPSBtZXRhZGF0YSBhcyBQYXNzd29yZFN0cmluZ0RlY29yYXRvckNvbmZpZ0ludGVybmFsO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbmZpcm1QYXNzd29yZDogc3RyaW5nID0gUmVmbGVjdFV0aWxpdGllcy5nZXRNZXRhZGF0YShFbnRpdHlVdGlsaXRpZXMuQ09ORklSTV9QQVNTV09SRF9LRVksIGVudGl0eSwga2V5KSBhcyBzdHJpbmc7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UGFzc3dvcmRWYWxpZGF0aW9uRXJyb3IoZW50aXR5UGFzc3dvcmQsIHBhc3N3b3JkTWV0YWRhdGEsIGNvbmZpcm1QYXNzd29yZCk7XG4gICAgICAgICAgICBjYXNlIERlY29yYXRvclR5cGVzLk5VTUJFUl9EUk9QRE9XTjpcbiAgICAgICAgICAgICAgICAvLyBCZWNhdXNlIG9ubHkgdmFsaWQgdmFsdWVzIGNhbiBiZSBzZWxlY3RlZCwgdGhpcyBpcyBhbHdheXMgdHJ1ZSB3aGVuIGl0IGhhcyBhIHZhbHVlXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGNhc2UgRGVjb3JhdG9yVHlwZXMuTlVNQkVSOlxuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5OVU1CRVJfU0xJREVSOlxuICAgICAgICAgICAgICAgIGNvbnN0IGVudGl0eU51bWJlcjogbnVtYmVyID0gZW50aXR5W2tleV0gYXMgbnVtYmVyO1xuICAgICAgICAgICAgICAgIGNvbnN0IG51bWJlck1ldGFkYXRhOiBEZWZhdWx0TnVtYmVyRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwgPSBtZXRhZGF0YSBhcyBEZWZhdWx0TnVtYmVyRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWw7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TnVtYmVyVmFsaWRhdGlvbkVycm9yKGVudGl0eU51bWJlciwgbnVtYmVyTWV0YWRhdGEpO1xuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5PQkpFQ1Q6XG4gICAgICAgICAgICAgICAgY29uc3QgZW50aXR5T2JqZWN0OiBFbnRpdHlUeXBlID0gZW50aXR5W2tleV0gYXMgRW50aXR5VHlwZTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHBhcmFtZXRlcktleSBpbiBlbnRpdHlPYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWU6IHVua25vd24gPSBlbnRpdHlPYmplY3RbcGFyYW1ldGVyS2V5XTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgIShtZXRhZGF0YSBhcyBEZWZhdWx0T2JqZWN0RGVjb3JhdG9yQ29uZmlnSW50ZXJuYWw8RW50aXR5VHlwZT4pLm9taXQuaW5jbHVkZXMocGFyYW1ldGVyS2V5KVxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgISghbWV0YWRhdGEucmVxdWlyZWQoZW50aXR5KSAmJiAodmFsdWUgPT0gdW5kZWZpbmVkIHx8IHZhbHVlID09ICcnKSlcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnI6IFZhbGlkYXRpb25FcnJvciB8IHVuZGVmaW5lZCA9IGF3YWl0IHRoaXMuZ2V0UHJvcGVydHlWYWxpZGF0aW9uRXJyb3IoZW50aXR5T2JqZWN0LCBwYXJhbWV0ZXJLZXksIG9taXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYCR7ZXJyLnByb3BlcnR5fSBpcyBpbnZhbGlkOiAke2Vyci5tZXNzYWdlfWBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5PQkpFQ1RfRFJPUERPV046XG4gICAgICAgICAgICAgICAgLy8gQmVjYXVzZSBvbmx5IHZhbGlkIHZhbHVlcyBjYW4gYmUgc2VsZWN0ZWQsIHRoaXMgaXMgYWx3YXlzIHRydWUgd2hlbiBpdCBoYXMgYSB2YWx1ZVxuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBjYXNlIERlY29yYXRvclR5cGVzLkFSUkFZX1NUUklOR19BVVRPQ09NUExFVEVfQ0hJUFM6XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nQXV0b2NvbXBsZXRlQXJyYXk6IHN0cmluZ1tdID0gZW50aXR5W2tleV0gYXMgc3RyaW5nW107XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHN0eWxpc3RpYy9tYXgtbGVuXG4gICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nQXV0b2NvbXBsZXRlQXJyYXlNZXRhZGF0YTogQXV0b2NvbXBsZXRlU3RyaW5nQ2hpcHNBcnJheURlY29yYXRvckNvbmZpZ0ludGVybmFsID0gbWV0YWRhdGEgYXMgQXV0b2NvbXBsZXRlU3RyaW5nQ2hpcHNBcnJheURlY29yYXRvckNvbmZpZ0ludGVybmFsO1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzdHlsaXN0aWMvbWF4LWxlblxuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmdldEFycmF5U3RyaW5nQXV0b2NvbXBsZXRlQ2hpcHNWYWxpZGF0aW9uRXJyb3IoZW50aXR5LCBzdHJpbmdBdXRvY29tcGxldGVBcnJheU1ldGFkYXRhLCBzdHJpbmdBdXRvY29tcGxldGVBcnJheSk7XG4gICAgICAgICAgICBjYXNlIERlY29yYXRvclR5cGVzLkFSUkFZX1NUUklOR19DSElQUzpcbiAgICAgICAgICAgIGNhc2UgRGVjb3JhdG9yVHlwZXMuQVJSQVlfREFURTpcbiAgICAgICAgICAgIGNhc2UgRGVjb3JhdG9yVHlwZXMuQVJSQVlfREFURV9USU1FOlxuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5BUlJBWV9EQVRFX1JBTkdFOlxuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5BUlJBWTpcbiAgICAgICAgICAgIGNhc2UgRGVjb3JhdG9yVHlwZXMuUkVGRVJFTkNFU19NQU5ZOlxuICAgICAgICAgICAgICAgIGNvbnN0IGVudGl0eUFycmF5OiB1bmtub3duW10gPSBlbnRpdHlba2V5XSBhcyB1bmtub3duW107XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHN0eWxpc3RpYy9tYXgtbGVuXG4gICAgICAgICAgICAgICAgY29uc3QgYXJyYXlNZXRhZGF0YTogRW50aXR5QXJyYXlEZWNvcmF0b3JDb25maWdJbnRlcm5hbDxFbnRpdHlUeXBlPiA9IG1ldGFkYXRhIGFzIEVudGl0eUFycmF5RGVjb3JhdG9yQ29uZmlnSW50ZXJuYWw8RW50aXR5VHlwZT47XG4gICAgICAgICAgICAgICAgaWYgKGFycmF5TWV0YWRhdGEucmVxdWlyZWQoZW50aXR5KSAmJiAhZW50aXR5QXJyYXkubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnbm8gaXRlbXMgaW4gYXJyYXknXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5EQVRFOlxuICAgICAgICAgICAgICAgIGNvbnN0IGVudGl0eURhdGU6IERhdGUgPSBuZXcgRGF0ZShlbnRpdHlba2V5XSBhcyBEYXRlKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRlTWV0YWRhdGE6IERlZmF1bHREYXRlRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwgPSBtZXRhZGF0YSBhcyBEZWZhdWx0RGF0ZURlY29yYXRvckNvbmZpZ0ludGVybmFsO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldERhdGVWYWxpZGF0aW9uRXJyb3IoZW50aXR5RGF0ZSwgZGF0ZU1ldGFkYXRhKTtcbiAgICAgICAgICAgIGNhc2UgRGVjb3JhdG9yVHlwZXMuREFURV9SQU5HRTpcbiAgICAgICAgICAgICAgICBjb25zdCBlbnRpdHlEYXRlUmFuZ2U6IERhdGVSYW5nZSA9IExvZGFzaFV0aWxpdGllcy5jbG9uZURlZXAoZW50aXR5W2tleV0gYXMgRGF0ZVJhbmdlKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRlUmFuZ2VNZXRhZGF0YTogRGF0ZVJhbmdlRGF0ZURlY29yYXRvckNvbmZpZ0ludGVybmFsID0gbWV0YWRhdGEgYXMgRGF0ZVJhbmdlRGF0ZURlY29yYXRvckNvbmZpZ0ludGVybmFsO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldERhdGVSYW5nZVZhbGlkYXRpb25FcnJvcihlbnRpdHksIGVudGl0eURhdGVSYW5nZSwgZGF0ZVJhbmdlTWV0YWRhdGEpO1xuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5EQVRFX1RJTUU6XG4gICAgICAgICAgICAgICAgY29uc3QgZW50aXR5RGF0ZVRpbWU6IERhdGUgPSBuZXcgRGF0ZShlbnRpdHlba2V5XSBhcyBEYXRlKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRlVGltZU1ldGFkYXRhOiBEYXRlVGltZURhdGVEZWNvcmF0b3JDb25maWdJbnRlcm5hbCA9IG1ldGFkYXRhIGFzIERhdGVUaW1lRGF0ZURlY29yYXRvckNvbmZpZ0ludGVybmFsO1xuICAgICAgICAgICAgICAgIGNvbnN0IGhhc1RpbWU6IGJvb2xlYW4gPSBSZWZsZWN0VXRpbGl0aWVzLmhhc01ldGFkYXRhKEVudGl0eVV0aWxpdGllcy5USU1FX0tFWSwgZW50aXR5LCBrZXkpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldERhdGVUaW1lVmFsaWRhdGlvbkVycm9yKGVudGl0eURhdGVUaW1lLCBkYXRlVGltZU1ldGFkYXRhLCBoYXNUaW1lKTtcbiAgICAgICAgICAgIGNhc2UgRGVjb3JhdG9yVHlwZXMuRklMRV9ERUZBVUxUOlxuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5GSUxFX0lNQUdFOlxuICAgICAgICAgICAgICAgIGNvbnN0IGVudGl0eUZpbGU6IEZpbGVEYXRhIHwgRmlsZURhdGFbXSA9IGVudGl0eVtrZXldIGFzIEZpbGVEYXRhIHwgRmlsZURhdGFbXTtcbiAgICAgICAgICAgICAgICBjb25zdCBlbnRpdHlGaWxlTWV0YWRhdGE6IERlZmF1bHRGaWxlRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwgPSBtZXRhZGF0YSBhcyBEZWZhdWx0RmlsZURlY29yYXRvckNvbmZpZ0ludGVybmFsO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEZpbGVEYXRhVmFsaWRhdGlvbkVycm9yKGVudGl0eUZpbGUsIGVudGl0eUZpbGVNZXRhZGF0YSk7XG4gICAgICAgICAgICBjYXNlIERlY29yYXRvclR5cGVzLlJFRkVSRU5DRVNfT05FOlxuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5IQVNfTUFOWTpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgRGVjb3JhdG9yVHlwZXMuQ1VTVE9NOlxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB0eXBlc2NyaXB0L25vLWV4cGxpY2l0LWFueSwgc3R5bGlzdGljL21heC1sZW5cbiAgICAgICAgICAgICAgICBjb25zdCBjdXN0b21NZXRhZGF0YTogQ3VzdG9tRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWw8RW50aXR5VHlwZSwgYW55LCBhbnksIGFueT4gPSBtZXRhZGF0YSBhcyBDdXN0b21EZWNvcmF0b3JDb25maWdJbnRlcm5hbDxFbnRpdHlUeXBlLCBhbnksIGFueSwgYW55PjtcbiAgICAgICAgICAgICAgICBpZiAoIWN1c3RvbU1ldGFkYXRhLmlzVmFsaWQoZW50aXR5W2tleV0sIG9taXQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnaW52YWxpZCdcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IHZhbGlkYXRlIHRoZSBpbnB1dCBiZWNhdXNlIHRoZSBEZWNvcmF0b3JUeXBlICR7dHlwZX0gaXMgbm90IGtub3duYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBhc3luYyBnZXRBcnJheVN0cmluZ0F1dG9jb21wbGV0ZUNoaXBzVmFsaWRhdGlvbkVycm9yPEVudGl0eVR5cGUgZXh0ZW5kcyBCYXNlRW50aXR5VHlwZTxFbnRpdHlUeXBlPj4oXG4gICAgICAgIGVudGl0eTogRW50aXR5VHlwZSxcbiAgICAgICAgbWV0YWRhdGE6IEF1dG9jb21wbGV0ZVN0cmluZ0NoaXBzQXJyYXlEZWNvcmF0b3JDb25maWdJbnRlcm5hbCxcbiAgICAgICAgc3RyaW5nQXV0b2NvbXBsZXRlQXJyYXk6IHN0cmluZ1tdXG4gICAgKTogUHJvbWlzZTxWYWxpZGF0aW9uRXJyb3IgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgaWYgKG1ldGFkYXRhLnJlcXVpcmVkKGVudGl0eSkgJiYgIXN0cmluZ0F1dG9jb21wbGV0ZUFycmF5Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ25vIGl0ZW1zIGluIGFycmF5J1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWV0YWRhdGEucmVzdHJpY3RUb09wdGlvbnMgPT0gdHJ1ZSkge1xuICAgICAgICAgICAgY29uc3QgYXV0b2NvbXBsZXRlVmFsdWVzOiBzdHJpbmdbXSA9IGF3YWl0IG1ldGFkYXRhLmF1dG9jb21wbGV0ZVZhbHVlcyhlbnRpdHkpO1xuICAgICAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBzdHJpbmdBdXRvY29tcGxldGVBcnJheSkge1xuICAgICAgICAgICAgICAgIGlmICghYXV0b2NvbXBsZXRlVmFsdWVzLmluY2x1ZGVzKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYFRoZSB2YWx1ZSBcIiR7dmFsdWV9XCIgbmVlZHMgdG8gYmUgb25lIG9mIHRoZSBwcm92aWRlZCB2YWx1ZXNgXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0Qm9vbGVhblZhbGlkYXRpb25FcnJvcjxFbnRpdHlUeXBlIGV4dGVuZHMgQmFzZUVudGl0eVR5cGU8RW50aXR5VHlwZT4+KFxuICAgICAgICBlbnRpdHk6IEVudGl0eVR5cGUsXG4gICAgICAgIHZhbHVlOiBib29sZWFuLFxuICAgICAgICBtZXRhZGF0YTogVG9nZ2xlQm9vbGVhbkRlY29yYXRvckNvbmZpZ0ludGVybmFsXG4gICAgKTogVmFsaWRhdGlvbkVycm9yIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKG1ldGFkYXRhLnJlcXVpcmVkKGVudGl0eSkgJiYgIXZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnbm90IHNlbGVjdGVkJ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGdldFN0cmluZ1ZhbGlkYXRpb25FcnJvcih2YWx1ZTogc3RyaW5nLCBtZXRhZGF0YTogRGVmYXVsdFN0cmluZ0RlY29yYXRvckNvbmZpZ0ludGVybmFsKTogVmFsaWRhdGlvbkVycm9yIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKG1ldGFkYXRhLm1heExlbmd0aCAmJiB2YWx1ZS5sZW5ndGggPiBtZXRhZGF0YS5tYXhMZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBuZWVkcyB0byBiZSBzbWFsbGVyIHRoYW4gJHttZXRhZGF0YS5tYXhMZW5ndGh9IGNoYXJhY3RlcnNgXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZXRhZGF0YS5taW5MZW5ndGggJiYgdmFsdWUubGVuZ3RoIDwgbWV0YWRhdGEubWluTGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBgbmVlZHMgdG8gYmUgYmlnZ2VyIHRoYW4gJHttZXRhZGF0YS5taW5MZW5ndGh9IGNoYXJhY3RlcnNgXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZXRhZGF0YS5yZWdleCAmJiAhdmFsdWUubWF0Y2gobWV0YWRhdGEucmVnZXgpKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnaW52YWxpZCdcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBhc3luYyBnZXRBdXRvY29tcGxldGVTdHJpbmdWYWxpZGF0aW9uRXJyb3I8RW50aXR5VHlwZSBleHRlbmRzIEJhc2VFbnRpdHlUeXBlPEVudGl0eVR5cGU+PihcbiAgICAgICAgZW50aXR5OiBFbnRpdHlUeXBlLFxuICAgICAgICB2YWx1ZTogc3RyaW5nLFxuICAgICAgICBtZXRhZGF0YTogQXV0b2NvbXBsZXRlU3RyaW5nRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWxcbiAgICApOiBQcm9taXNlPFZhbGlkYXRpb25FcnJvciB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBpZiAobWV0YWRhdGEubWF4TGVuZ3RoICYmIHZhbHVlLmxlbmd0aCA+IG1ldGFkYXRhLm1heExlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYG5lZWRzIHRvIGJlIHNtYWxsZXIgdGhhbiAke21ldGFkYXRhLm1heExlbmd0aH0gY2hhcmFjdGVyc2BcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1ldGFkYXRhLm1pbkxlbmd0aCAmJiB2YWx1ZS5sZW5ndGggPCBtZXRhZGF0YS5taW5MZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBuZWVkcyB0byBiZSBiaWdnZXIgdGhhbiAke21ldGFkYXRhLm1pbkxlbmd0aH0gY2hhcmFjdGVyc2BcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1ldGFkYXRhLnJlZ2V4ICYmICF2YWx1ZS5tYXRjaChtZXRhZGF0YS5yZWdleCkpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdpbnZhbGlkJ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWV0YWRhdGEucmVzdHJpY3RUb09wdGlvbnMgPT0gdHJ1ZSAmJiAhKGF3YWl0IG1ldGFkYXRhLmF1dG9jb21wbGV0ZVZhbHVlcyhlbnRpdHkpKS5pbmNsdWRlcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdOZWVkcyB0byBiZSBvbmUgb2YgdGhlIHByb3ZpZGVkIHZhbHVlcydcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBnZXRUZXh0Ym94VmFsaWRhdGlvbkVycm9yKHZhbHVlOiBzdHJpbmcsIG1ldGFkYXRhOiBUZXh0Ym94U3RyaW5nRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwpOiBWYWxpZGF0aW9uRXJyb3IgfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAobWV0YWRhdGEubWF4TGVuZ3RoICYmIHZhbHVlLmxlbmd0aCA+IG1ldGFkYXRhLm1heExlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYG5lZWRzIHRvIGJlIHNtYWxsZXIgdGhhbiAke21ldGFkYXRhLm1heExlbmd0aH0gY2hhcmFjdGVyc2BcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1ldGFkYXRhLm1pbkxlbmd0aCAmJiB2YWx1ZS5sZW5ndGggPCBtZXRhZGF0YS5taW5MZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBuZWVkcyB0byBiZSBiaWdnZXIgdGhhbiAke21ldGFkYXRhLm1pbkxlbmd0aH0gY2hhcmFjdGVyc2BcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBnZXRQYXNzd29yZFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgdmFsdWU6IHN0cmluZyxcbiAgICAgICAgbWV0YWRhdGE6IFBhc3N3b3JkU3RyaW5nRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwsXG4gICAgICAgIGNvbmZpcm1QYXNzd29yZDogc3RyaW5nXG4gICAgKTogVmFsaWRhdGlvbkVycm9yIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKHZhbHVlICE9PSBjb25maXJtUGFzc3dvcmQpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdwYXNzd29yZHMgbmVlZCB0byBtYXRjaCdcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1ldGFkYXRhLm1heExlbmd0aCAmJiB2YWx1ZS5sZW5ndGggPiBtZXRhZGF0YS5tYXhMZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBuZWVkcyB0byBiZSBzbWFsbGVyIHRoYW4gJHttZXRhZGF0YS5tYXhMZW5ndGh9IGNoYXJhY3RlcnNgXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZXRhZGF0YS5taW5MZW5ndGggJiYgdmFsdWUubGVuZ3RoIDwgbWV0YWRhdGEubWluTGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBgbmVlZHMgdG8gYmUgYmlnZ2VyIHRoYW4gJHttZXRhZGF0YS5taW5MZW5ndGh9IGNoYXJhY3RlcnNgXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZXRhZGF0YS5yZWdleCAmJiAhdmFsdWUubWF0Y2gobWV0YWRhdGEucmVnZXgpKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnaW52YWxpZCdcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBnZXROdW1iZXJWYWxpZGF0aW9uRXJyb3IodmFsdWU6IG51bWJlciwgbWV0YWRhdGE6IERlZmF1bHROdW1iZXJEZWNvcmF0b3JDb25maWdJbnRlcm5hbCk6IFZhbGlkYXRpb25FcnJvciB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmIChtZXRhZGF0YS5tYXggJiYgdmFsdWUgPiBtZXRhZGF0YS5tYXgpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBuZWVkcyB0byBiZSBzbWFsbGVyIHRoYW4gJHttZXRhZGF0YS5tYXh9YFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWV0YWRhdGEubWluICYmIHZhbHVlIDwgbWV0YWRhdGEubWluKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBgbmVlZHMgdG8gYmUgYmlnZ2VyIHRoYW4gJHttZXRhZGF0YS5taW59YFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGdldERhdGVWYWxpZGF0aW9uRXJyb3IodmFsdWU6IERhdGUsIG1ldGFkYXRhOiBEZWZhdWx0RGF0ZURlY29yYXRvckNvbmZpZ0ludGVybmFsKTogVmFsaWRhdGlvbkVycm9yIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKG1ldGFkYXRhLm1pbiAmJiB2YWx1ZS5nZXRUaW1lKCkgPCBtZXRhZGF0YS5taW4odmFsdWUpLmdldFRpbWUoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYG5lZWRzIHRvIGJlIGFmdGVyICR7Zm9ybWF0RGF0ZShtZXRhZGF0YS5taW4odmFsdWUpKX1gXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZXRhZGF0YS5tYXggJiYgdmFsdWUuZ2V0VGltZSgpID4gbWV0YWRhdGEubWF4KHZhbHVlKS5nZXRUaW1lKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBuZWVkcyB0byBiZSBiZWZvcmUgJHtmb3JtYXREYXRlKG1ldGFkYXRhLm1heCh2YWx1ZSkpfWBcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1ldGFkYXRhLmZpbHRlciAmJiAhbWV0YWRhdGEuZmlsdGVyKHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ2ludmFsaWQnXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHNvbmFyL2NvZ25pdGl2ZS1jb21wbGV4aXR5XG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0RGF0ZVJhbmdlVmFsaWRhdGlvbkVycm9yPEVudGl0eVR5cGUgZXh0ZW5kcyBCYXNlRW50aXR5VHlwZTxFbnRpdHlUeXBlPj4oXG4gICAgICAgIGVudGl0eTogRW50aXR5VHlwZSxcbiAgICAgICAgdmFsdWU6IFBhcnRpYWw8RGF0ZVJhbmdlPixcbiAgICAgICAgbWV0YWRhdGE6IERhdGVSYW5nZURhdGVEZWNvcmF0b3JDb25maWdJbnRlcm5hbFxuICAgICk6IFZhbGlkYXRpb25FcnJvciB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmIChtZXRhZGF0YS5yZXF1aXJlZChlbnRpdHkpICYmICh2YWx1ZS5zdGFydCA9PSB1bmRlZmluZWQgfHwgdmFsdWUuZW5kID09IHVuZGVmaW5lZCB8fCB2YWx1ZS52YWx1ZXMgPT0gdW5kZWZpbmVkKSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ3JlcXVpcmVkJ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUuc3RhcnQpIHtcbiAgICAgICAgICAgIHZhbHVlLnN0YXJ0ID0gbmV3IERhdGUodmFsdWUuc3RhcnQpO1xuICAgICAgICAgICAgaWYgKG1ldGFkYXRhLm1pblN0YXJ0ICYmIHZhbHVlLnN0YXJ0LmdldFRpbWUoKSA8IG1ldGFkYXRhLm1pblN0YXJ0KHZhbHVlLnN0YXJ0KS5nZXRUaW1lKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBzdGFydCBkYXRlIG5lZWRzIHRvIGJlIGFmdGVyICR7Zm9ybWF0RGF0ZShtZXRhZGF0YS5taW5TdGFydCh2YWx1ZS5zdGFydCkpfWBcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1ldGFkYXRhLm1heFN0YXJ0ICYmIHZhbHVlLnN0YXJ0LmdldFRpbWUoKSA+IG1ldGFkYXRhLm1heFN0YXJ0KHZhbHVlLnN0YXJ0KS5nZXRUaW1lKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBzdGFydCBkYXRlIG5lZWRzIHRvIGJlIGJlZm9yZSAke2Zvcm1hdERhdGUobWV0YWRhdGEubWF4U3RhcnQodmFsdWUuc3RhcnQpKX1gXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtZXRhZGF0YS5maWx0ZXIgJiYgIW1ldGFkYXRhLmZpbHRlcih2YWx1ZS5zdGFydCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdzdGFydCBkYXRlIGludmFsaWQnXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWx1ZS5lbmQpIHtcbiAgICAgICAgICAgIHZhbHVlLmVuZCA9IG5ldyBEYXRlKHZhbHVlLmVuZCk7XG4gICAgICAgICAgICBpZiAobWV0YWRhdGEubWluRW5kICYmIHZhbHVlLmVuZC5nZXRUaW1lKCkgPCBtZXRhZGF0YS5taW5FbmQodmFsdWUuZW5kKS5nZXRUaW1lKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBlbmQgZGF0ZSBuZWVkcyB0byBiZSBhZnRlciAke2Zvcm1hdERhdGUobWV0YWRhdGEubWluRW5kKHZhbHVlLmVuZCkpfWBcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1ldGFkYXRhLm1heEVuZCAmJiB2YWx1ZS5lbmQuZ2V0VGltZSgpID4gbWV0YWRhdGEubWF4RW5kKHZhbHVlLmVuZCkuZ2V0VGltZSgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgZW5kIGRhdGUgbmVlZHMgdG8gYmUgYmVmb3JlICR7Zm9ybWF0RGF0ZShtZXRhZGF0YS5tYXhFbmQodmFsdWUuZW5kKSl9YFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWV0YWRhdGEuZmlsdGVyICYmICFtZXRhZGF0YS5maWx0ZXIodmFsdWUuZW5kKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ2VuZCBkYXRlIGludmFsaWQnXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtZXRhZGF0YS5maWx0ZXIgJiYgdmFsdWUudmFsdWVzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGRhdGUgb2YgdmFsdWUudmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFtZXRhZGF0YS5maWx0ZXIoZGF0ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGB2YWx1ZSAke2Zvcm1hdERhdGUoZGF0ZSl9IGludmFsaWRgXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHNvbmFyL2NvZ25pdGl2ZS1jb21wbGV4aXR5XG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0RGF0ZVRpbWVWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgIHZhbHVlOiBEYXRlLFxuICAgICAgICBtZXRhZGF0YTogRGF0ZVRpbWVEYXRlRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwsXG4gICAgICAgIGhhc1RpbWU6IGJvb2xlYW5cbiAgICApOiBWYWxpZGF0aW9uRXJyb3IgfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAoIWhhc1RpbWUpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdubyB0aW1lJ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWV0YWRhdGEubWluRGF0ZSAmJiB2YWx1ZS5nZXRUaW1lKCkgPCBtZXRhZGF0YS5taW5EYXRlKHZhbHVlKS5nZXRUaW1lKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBkYXRlIG5lZWRzIHRvIGJlIGFmdGVyICR7Zm9ybWF0RGF0ZShtZXRhZGF0YS5taW5EYXRlKHZhbHVlKSl9YFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWV0YWRhdGEubWF4RGF0ZSAmJiB2YWx1ZS5nZXRUaW1lKCkgPiBtZXRhZGF0YS5tYXhEYXRlKHZhbHVlKS5nZXRUaW1lKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBkYXRlIG5lZWRzIHRvIGJlIGJlZm9yZSAke2Zvcm1hdERhdGUobWV0YWRhdGEubWF4RGF0ZSh2YWx1ZSkpfWBcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1ldGFkYXRhLmZpbHRlckRhdGUgJiYgIW1ldGFkYXRhLmZpbHRlckRhdGUodmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnaW52YWxpZCBkYXRlJ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0aW1lOiBUaW1lID0gRGF0ZVV0aWxpdGllcy5nZXRUaW1lRnJvbURhdGUodmFsdWUpIGFzIFRpbWU7XG4gICAgICAgIGlmIChtZXRhZGF0YS5taW5UaW1lKSB7XG4gICAgICAgICAgICBjb25zdCBtaW5UaW1lOiBUaW1lID0gbWV0YWRhdGEubWluVGltZSh2YWx1ZSk7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgICAgICAgdGltZS5ob3VycyA+IG1pblRpbWUuaG91cnNcbiAgICAgICAgICAgICAgICAgICAgfHwgKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGltZS5ob3VycyA9PT0gbWluVGltZS5ob3Vyc1xuICAgICAgICAgICAgICAgICAgICAgICAgJiYgdGltZS5taW51dGVzID49IG1pblRpbWUubWludXRlc1xuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgdGltZSBuZWVkcyB0byBiZSBhZnRlciAke21pblRpbWUuaG91cnN9OiR7bWluVGltZS5taW51dGVzfWBcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChtZXRhZGF0YS5tYXhUaW1lKSB7XG4gICAgICAgICAgICBjb25zdCBtYXhUaW1lOiBUaW1lID0gbWV0YWRhdGEubWF4VGltZSh2YWx1ZSk7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgICAgICAgdGltZS5ob3VycyA8IG1heFRpbWUuaG91cnNcbiAgICAgICAgICAgICAgICAgICAgfHwgKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGltZS5ob3VycyA9PT0gbWF4VGltZS5ob3Vyc1xuICAgICAgICAgICAgICAgICAgICAgICAgJiYgdGltZS5taW51dGVzIDw9IG1heFRpbWUubWludXRlc1xuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgdGltZSBuZWVkcyB0byBiZSBiZWZvcmUgJHttYXhUaW1lLmhvdXJzfToke21heFRpbWUubWludXRlc31gXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobWV0YWRhdGEuZmlsdGVyVGltZSAmJiAhbWV0YWRhdGEuZmlsdGVyVGltZSh0aW1lKSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ2ludmFsaWQgdGltZSdcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBnZXRGaWxlRGF0YVZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgdmFsdWU6IEZpbGVEYXRhIHwgRmlsZURhdGFbXSxcbiAgICAgICAgbWV0YWRhdGE6IERlZmF1bHRGaWxlRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWxcbiAgICApOiBWYWxpZGF0aW9uRXJyb3IgfCB1bmRlZmluZWQge1xuICAgICAgICBjb25zdCBmaWxlczogRmlsZURhdGFbXSA9IG1ldGFkYXRhLm11bHRpcGxlID8gdmFsdWUgYXMgRmlsZURhdGFbXSA6IFt2YWx1ZSBhcyBGaWxlRGF0YV07XG4gICAgICAgIGxldCBmaWxlU2l6ZVRvdGFsOiBudW1iZXIgPSAwO1xuICAgICAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICAgICAgICAgIGlmICghZmlsZS5uYW1lIHx8ICghZmlsZS5maWxlICYmICFmaWxlLnVybCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdpbnZhbGlkJ1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIUZpbGVVdGlsaXRpZXMuaXNNaW1lVHlwZVZhbGlkKGZpbGUudHlwZSwgbWV0YWRhdGEuYWxsb3dlZE1pbWVUeXBlcykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBtaW1ldHlwZSBuZWVkcyB0byBiZSBvbmUgb2YgJHttZXRhZGF0YS5hbGxvd2VkTWltZVR5cGVzfWBcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKEZpbGVVdGlsaXRpZXMudHJhbnNmb3JtVG9NZWdhQnl0ZXMoZmlsZS5zaXplLCAnQicpID4gbWV0YWRhdGEubWF4U2l6ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYGZpbGUgbmVlZHMgdG8gYmUgc21hbGxlciB0aGFuICR7bWV0YWRhdGEubWF4U2l6ZX0gTUJgXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbGVTaXplVG90YWwgKz0gZmlsZS5zaXplO1xuICAgICAgICAgICAgaWYgKEZpbGVVdGlsaXRpZXMudHJhbnNmb3JtVG9NZWdhQnl0ZXMoZmlsZVNpemVUb3RhbCwgJ0InKSA+IG1ldGFkYXRhLm1heFNpemVUb3RhbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYFRoZSBzaXplIG9mIGFsbCBmaWxlcyBjb21iaW5lZCBuZWVkcyB0byBiZSBzbWFsbGVyIHRoYW4gJHttZXRhZGF0YS5tYXhTaXplVG90YWx9YFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG5mdW5jdGlvbiBwYWRUbzJEaWdpdHMobnVtOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiBudW0udG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuZnVuY3Rpb24gZm9ybWF0RGF0ZShkYXRlOiBEYXRlKTogc3RyaW5nIHtcbiAgICByZXR1cm4gW1xuICAgICAgICBwYWRUbzJEaWdpdHMoZGF0ZS5nZXREYXRlKCkpLFxuICAgICAgICBwYWRUbzJEaWdpdHMoZGF0ZS5nZXRNb250aCgpICsgMSksXG4gICAgICAgIGRhdGUuZ2V0RnVsbFllYXIoKVxuICAgIF0uam9pbignLycpO1xufSJdfQ==
|