@po-ui/ng-components 18.21.0 → 18.23.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/esm2022/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-field.interface.mjs +1 -1
- package/esm2022/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-fields/po-dynamic-form-fields.component.mjs +19 -19
- package/esm2022/lib/components/po-field/po-checkbox-group/po-checkbox-group-base.component.mjs +18 -2
- package/esm2022/lib/components/po-field/po-checkbox-group/po-checkbox-group.component.mjs +4 -4
- package/esm2022/lib/components/po-field/po-combo/po-combo-base.component.mjs +22 -2
- package/esm2022/lib/components/po-field/po-combo/po-combo.component.mjs +4 -4
- package/esm2022/lib/components/po-field/po-datepicker/po-datepicker-base.component.mjs +22 -2
- package/esm2022/lib/components/po-field/po-datepicker/po-datepicker.component.mjs +4 -4
- package/esm2022/lib/components/po-field/po-datepicker-range/po-datepicker-range-base.component.mjs +18 -2
- package/esm2022/lib/components/po-field/po-datepicker-range/po-datepicker-range.component.mjs +4 -4
- package/esm2022/lib/components/po-field/po-decimal/po-decimal.component.mjs +4 -4
- package/esm2022/lib/components/po-field/po-email/po-email.component.mjs +4 -4
- package/esm2022/lib/components/po-field/po-field-container/po-field-container-bottom/po-field-container-bottom.component.mjs +27 -10
- package/esm2022/lib/components/po-field/po-field-container/po-field-container.module.mjs +5 -4
- package/esm2022/lib/components/po-field/po-field-validate.model.mjs +22 -2
- package/esm2022/lib/components/po-field/po-input/po-input-base.component.mjs +22 -2
- package/esm2022/lib/components/po-field/po-input/po-input.component.mjs +4 -4
- package/esm2022/lib/components/po-field/po-login/po-login.component.mjs +4 -4
- package/esm2022/lib/components/po-field/po-lookup/po-lookup-base.component.mjs +22 -2
- package/esm2022/lib/components/po-field/po-lookup/po-lookup.component.mjs +4 -4
- package/esm2022/lib/components/po-field/po-multiselect/po-multiselect-base.component.mjs +22 -2
- package/esm2022/lib/components/po-field/po-multiselect/po-multiselect.component.mjs +4 -4
- package/esm2022/lib/components/po-field/po-number/po-number.component.mjs +4 -4
- package/esm2022/lib/components/po-field/po-password/po-password.component.mjs +4 -4
- package/esm2022/lib/components/po-field/po-radio-group/po-radio-group-base.component.mjs +18 -2
- package/esm2022/lib/components/po-field/po-radio-group/po-radio-group.component.mjs +4 -4
- package/esm2022/lib/components/po-field/po-rich-text/po-rich-text-base.component.mjs +18 -2
- package/esm2022/lib/components/po-field/po-rich-text/po-rich-text.component.mjs +4 -4
- package/esm2022/lib/components/po-field/po-select/po-select.component.mjs +4 -4
- package/esm2022/lib/components/po-field/po-textarea/po-textarea-base.component.mjs +18 -2
- package/esm2022/lib/components/po-field/po-textarea/po-textarea.component.mjs +4 -4
- package/esm2022/lib/components/po-field/po-upload/po-upload-base.component.mjs +86 -2
- package/esm2022/lib/components/po-field/po-upload/po-upload.component.mjs +17 -7
- package/esm2022/lib/components/po-field/po-url/po-url.component.mjs +4 -4
- package/esm2022/lib/components/po-progress/index.mjs +2 -1
- package/esm2022/lib/components/po-progress/interfaces/index.mjs +2 -0
- package/esm2022/lib/components/po-progress/interfaces/po-progress-actions.interface.mjs +2 -0
- package/esm2022/lib/components/po-progress/po-progress-base.component.mjs +87 -2
- package/esm2022/lib/components/po-progress/po-progress.component.mjs +44 -15
- package/fesm2022/po-ui-ng-components.mjs +553 -132
- package/fesm2022/po-ui-ng-components.mjs.map +1 -1
- package/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-field.interface.d.ts +57 -1
- package/lib/components/po-field/po-checkbox-group/po-checkbox-group-base.component.d.ts +14 -1
- package/lib/components/po-field/po-combo/po-combo-base.component.d.ts +16 -1
- package/lib/components/po-field/po-datepicker/po-datepicker-base.component.d.ts +16 -1
- package/lib/components/po-field/po-datepicker-range/po-datepicker-range-base.component.d.ts +14 -1
- package/lib/components/po-field/po-field-container/po-field-container-bottom/po-field-container-bottom.component.d.ts +7 -1
- package/lib/components/po-field/po-field-container/po-field-container.module.d.ts +2 -1
- package/lib/components/po-field/po-field-validate.model.d.ts +16 -1
- package/lib/components/po-field/po-input/po-input-base.component.d.ts +16 -1
- package/lib/components/po-field/po-lookup/po-lookup-base.component.d.ts +16 -1
- package/lib/components/po-field/po-multiselect/po-multiselect-base.component.d.ts +16 -1
- package/lib/components/po-field/po-radio-group/po-radio-group-base.component.d.ts +14 -1
- package/lib/components/po-field/po-rich-text/po-rich-text-base.component.d.ts +14 -1
- package/lib/components/po-field/po-textarea/po-textarea-base.component.d.ts +14 -1
- package/lib/components/po-field/po-upload/po-upload-base.component.d.ts +80 -1
- package/lib/components/po-field/po-upload/po-upload.component.d.ts +6 -0
- package/lib/components/po-progress/index.d.ts +1 -0
- package/lib/components/po-progress/interfaces/index.d.ts +1 -0
- package/lib/components/po-progress/interfaces/po-progress-actions.interface.d.ts +83 -0
- package/lib/components/po-progress/po-progress-base.component.d.ts +81 -1
- package/lib/components/po-progress/po-progress.component.d.ts +4 -0
- package/package.json +4 -4
- package/po-ui-ng-components-18.23.0.tgz +0 -0
- package/schematics/ng-add/index.js +1 -1
- package/schematics/ng-update/v14/index.js +1 -1
- package/schematics/ng-update/v15/index.js +1 -1
- package/schematics/ng-update/v16/index.js +1 -1
- package/schematics/ng-update/v17/index.js +1 -1
- package/schematics/ng-update/v18/index.js +2 -2
- package/schematics/ng-update/v2/index.js +1 -1
- package/schematics/ng-update/v3/index.js +1 -1
- package/schematics/ng-update/v4/index.js +1 -1
- package/schematics/ng-update/v5/index.js +1 -1
- package/schematics/ng-update/v6/index.js +1 -1
- package/po-ui-ng-components-18.21.0.tgz +0 -0
|
@@ -160,6 +160,19 @@ export class PoMultiselectBaseComponent {
|
|
|
160
160
|
*
|
|
161
161
|
*/
|
|
162
162
|
fieldErrorMessage;
|
|
163
|
+
/**
|
|
164
|
+
* @optional
|
|
165
|
+
*
|
|
166
|
+
* @description
|
|
167
|
+
*
|
|
168
|
+
* Limita a exibição da mensagem de erro a duas linhas e exibe um tooltip com o texto completo.
|
|
169
|
+
*
|
|
170
|
+
* > Caso essa propriedade seja definida como `true`, a mensagem de erro será limitada a duas linhas
|
|
171
|
+
* e um tooltip será exibido ao passar o mouse sobre a mensagem para mostrar o conteúdo completo.
|
|
172
|
+
*
|
|
173
|
+
* @default `false`
|
|
174
|
+
*/
|
|
175
|
+
errorLimit = false;
|
|
163
176
|
/**
|
|
164
177
|
* @optional
|
|
165
178
|
*
|
|
@@ -181,6 +194,7 @@ export class PoMultiselectBaseComponent {
|
|
|
181
194
|
* @default `false`
|
|
182
195
|
*/
|
|
183
196
|
appendBox = false;
|
|
197
|
+
errorAppendBox = false;
|
|
184
198
|
selectedOptions = [];
|
|
185
199
|
visibleOptionsDropdown = [];
|
|
186
200
|
visibleTags = [];
|
|
@@ -684,7 +698,7 @@ export class PoMultiselectBaseComponent {
|
|
|
684
698
|
}
|
|
685
699
|
}
|
|
686
700
|
static ɵfac = function PoMultiselectBaseComponent_Factory(t) { return new (t || PoMultiselectBaseComponent)(i0.ɵɵdirectiveInject(i1.PoLanguageService)); };
|
|
687
|
-
static ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: PoMultiselectBaseComponent, inputs: { autoFocus: [2, "p-auto-focus", "autoFocus", convertToBoolean], label: [0, "p-label", "label"], help: [0, "p-help", "help"], optional: [0, "p-optional", "optional"], placeholder: [0, "p-placeholder", "placeholder"], placeholderSearch: [0, "p-placeholder-search", "placeholderSearch"], name: "name", hideSelectAll: [2, "p-hide-select-all", "hideSelectAll", convertToBoolean], fieldErrorMessage: [0, "p-field-error-message", "fieldErrorMessage"], appendBox: [2, "p-append-in-body", "appendBox", convertToBoolean], filterService: [0, "p-filter-service", "filterService"], autoHeight: [2, "p-auto-height", "autoHeight", convertToBoolean], debounceTime: [0, "p-debounce-time", "debounceTime"], literals: [0, "p-literals", "literals"], required: [0, "p-required", "required"], showRequired: [0, "p-show-required", "showRequired"], disabled: [0, "p-disabled", "disabled"], hideSearch: [0, "p-hide-search", "hideSearch"], options: [0, "p-options", "options"], sort: [0, "p-sort", "sort"], filterMode: [0, "p-filter-mode", "filterMode"], fieldLabel: [0, "p-field-label", "fieldLabel"], fieldValue: [0, "p-field-value", "fieldValue"] }, outputs: { change: "p-change" }, features: [i0.ɵɵInputTransformsFeature] });
|
|
701
|
+
static ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: PoMultiselectBaseComponent, inputs: { autoFocus: [2, "p-auto-focus", "autoFocus", convertToBoolean], label: [0, "p-label", "label"], help: [0, "p-help", "help"], optional: [0, "p-optional", "optional"], placeholder: [0, "p-placeholder", "placeholder"], placeholderSearch: [0, "p-placeholder-search", "placeholderSearch"], name: "name", hideSelectAll: [2, "p-hide-select-all", "hideSelectAll", convertToBoolean], fieldErrorMessage: [0, "p-field-error-message", "fieldErrorMessage"], errorLimit: [0, "p-error-limit", "errorLimit"], appendBox: [2, "p-append-in-body", "appendBox", convertToBoolean], errorAppendBox: [2, "p-error-append-in-body", "errorAppendBox", convertToBoolean], filterService: [0, "p-filter-service", "filterService"], autoHeight: [2, "p-auto-height", "autoHeight", convertToBoolean], debounceTime: [0, "p-debounce-time", "debounceTime"], literals: [0, "p-literals", "literals"], required: [0, "p-required", "required"], showRequired: [0, "p-show-required", "showRequired"], disabled: [0, "p-disabled", "disabled"], hideSearch: [0, "p-hide-search", "hideSearch"], options: [0, "p-options", "options"], sort: [0, "p-sort", "sort"], filterMode: [0, "p-filter-mode", "filterMode"], fieldLabel: [0, "p-field-label", "fieldLabel"], fieldValue: [0, "p-field-value", "fieldValue"] }, outputs: { change: "p-change" }, features: [i0.ɵɵInputTransformsFeature] });
|
|
688
702
|
}
|
|
689
703
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PoMultiselectBaseComponent, [{
|
|
690
704
|
type: Directive
|
|
@@ -715,12 +729,18 @@ export class PoMultiselectBaseComponent {
|
|
|
715
729
|
}], fieldErrorMessage: [{
|
|
716
730
|
type: Input,
|
|
717
731
|
args: ['p-field-error-message']
|
|
732
|
+
}], errorLimit: [{
|
|
733
|
+
type: Input,
|
|
734
|
+
args: ['p-error-limit']
|
|
718
735
|
}], change: [{
|
|
719
736
|
type: Output,
|
|
720
737
|
args: ['p-change']
|
|
721
738
|
}], appendBox: [{
|
|
722
739
|
type: Input,
|
|
723
740
|
args: [{ alias: 'p-append-in-body', transform: convertToBoolean }]
|
|
741
|
+
}], errorAppendBox: [{
|
|
742
|
+
type: Input,
|
|
743
|
+
args: [{ alias: 'p-error-append-in-body', transform: convertToBoolean }]
|
|
724
744
|
}], filterService: [{
|
|
725
745
|
type: Input,
|
|
726
746
|
args: ['p-filter-service']
|
|
@@ -761,4 +781,4 @@ export class PoMultiselectBaseComponent {
|
|
|
761
781
|
type: Input,
|
|
762
782
|
args: ['p-field-value']
|
|
763
783
|
}] }); })();
|
|
764
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tbXVsdGlzZWxlY3QtYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2NvbXBvbmVudHMvcG8tZmllbGQvcG8tbXVsdGlzZWxlY3QvcG8tbXVsdGlzZWxlY3QtYmFzZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUcvRSxPQUFPLEVBQWMsT0FBTyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUN6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVwRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFFckYsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixRQUFRLEVBQ1IscUNBQXFDLEVBQ3JDLDJDQUEyQyxFQUMzQyxxQkFBcUIsRUFDdEIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFakQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sbUNBQW1DLENBQUM7OztBQU01RSxNQUFNLG9DQUFvQyxHQUFHLEdBQUcsQ0FBQztBQUNqRCxNQUFNLGtDQUFrQyxHQUFHLE9BQU8sQ0FBQztBQUNuRCxNQUFNLGtDQUFrQyxHQUFHLE9BQU8sQ0FBQztBQUVuRCxNQUFNLENBQUMsTUFBTSw0QkFBNEIsR0FBRztJQUMxQyxFQUFFLEVBQXlCO1FBQ3pCLE1BQU0sRUFBRSxlQUFlO1FBQ3ZCLGlCQUFpQixFQUFFLFFBQVE7UUFDM0IsU0FBUyxFQUFFLFlBQVk7UUFDdkIsVUFBVSxFQUFFLGNBQWM7S0FDM0I7SUFDRCxFQUFFLEVBQXlCO1FBQ3pCLE1BQU0sRUFBRSxzQkFBc0I7UUFDOUIsaUJBQWlCLEVBQUUsT0FBTztRQUMxQixTQUFTLEVBQUUsa0JBQWtCO1FBQzdCLFVBQVUsRUFBRSxtQkFBbUI7S0FDaEM7SUFDRCxFQUFFLEVBQXlCO1FBQ3pCLE1BQU0sRUFBRSx3QkFBd0I7UUFDaEMsaUJBQWlCLEVBQUUsUUFBUTtRQUMzQixTQUFTLEVBQUUsa0JBQWtCO1FBQzdCLFVBQVUsRUFBRSxrQkFBa0I7S0FDL0I7SUFDRCxFQUFFLEVBQXlCO1FBQ3pCLE1BQU0sRUFBRSxtQkFBbUI7UUFDM0IsaUJBQWlCLEVBQUUsUUFBUTtRQUMzQixTQUFTLEVBQUUsYUFBYTtRQUN4QixVQUFVLEVBQUUsa0JBQWtCO0tBQy9CO0NBQ0YsQ0FBQztBQUVGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5REc7QUFFSCxNQUFNLE9BQWdCLDBCQUEwQjtJQUM5Qzs7Ozs7Ozs7OztPQVVHO0lBQzRELFNBQVMsR0FBWSxLQUFLLENBQUM7SUFFMUYsMkJBQTJCO0lBQ1QsS0FBSyxDQUFVO0lBRWpDLG1DQUFtQztJQUNsQixJQUFJLENBQVU7SUFFL0I7Ozs7Ozs7Ozs7OztPQVlHO0lBQ2tCLFFBQVEsQ0FBVTtJQUV2QywyREFBMkQ7SUFDbkMsV0FBVyxHQUFZLEVBQUUsQ0FBQztJQUVsRDs7Ozs7Ozs7T0FRRztJQUM0QixpQkFBaUIsR0FBWSxFQUFFLENBQUM7SUFFL0QsMEJBQTBCO0lBQ1gsSUFBSSxDQUFTO0lBRTVCOzs7Ozs7OztPQVFHO0lBQ2lFLGFBQWEsQ0FBVztJQUU1Rjs7Ozs7Ozs7O09BU0c7SUFDNkIsaUJBQWlCLENBQVM7SUFFMUQ7Ozs7OztPQU1HO0lBQ2lCLE1BQU0sR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztJQUV4RTs7Ozs7Ozs7Ozs7T0FXRztJQUNnRSxTQUFTLEdBQWEsS0FBSyxDQUFDO0lBRS9GLGVBQWUsR0FBcUMsRUFBRSxDQUFDO0lBQ3ZELHNCQUFzQixHQUFxQyxFQUFFLENBQUM7SUFDOUQsV0FBVyxHQUFHLEVBQUUsQ0FBQztJQUNqQixpQkFBaUIsR0FBRyxLQUFLLENBQUM7SUFDMUIsYUFBYSxHQUFZLElBQUksQ0FBQztJQUM5QixhQUFhLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUM5QixPQUFPLENBQTZCO0lBQ3BDLGNBQWMsQ0FBNkI7SUFFM0MsMkJBQTJCO0lBQ2pCLGNBQWMsR0FBUSxJQUFJLENBQUM7SUFFM0IsZ0JBQWdCLENBQWE7SUFDN0IsY0FBYyxDQUFhO0lBQzNCLDhCQUE4QixDQUFlO0lBRS9DLGNBQWMsQ0FBZ0M7SUFDOUMsYUFBYSxHQUFZLEdBQUcsQ0FBQztJQUM3QixTQUFTLEdBQWEsS0FBSyxDQUFDO0lBQzVCLFdBQVcsR0FBNkIsdUJBQXVCLENBQUMsVUFBVSxDQUFDO0lBQzNFLFdBQVcsR0FBYSxLQUFLLENBQUM7SUFDOUIsU0FBUyxDQUF3QjtJQUNqQyxRQUFRLENBQW1DO0lBQzNDLFNBQVMsR0FBYSxLQUFLLENBQUM7SUFDNUIsS0FBSyxHQUFhLEtBQUssQ0FBQztJQUN4QixXQUFXLEdBQVksS0FBSyxDQUFDO0lBQzdCLFdBQVcsR0FBWSxrQ0FBa0MsQ0FBQztJQUMxRCxXQUFXLEdBQVksa0NBQWtDLENBQUM7SUFDMUQsUUFBUSxDQUFTO0lBRWpCLGVBQWUsQ0FBQztJQUNoQixhQUFhLENBQU07SUFDbkIsZUFBZSxDQUFNO0lBQ3JCLHNCQUFzQixDQUFVO0lBRXhDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQTBCRztJQUNILElBQStCLGFBQWEsQ0FBQyxLQUFtQztRQUM5RSxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1YsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7WUFDNUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsc0JBQXNCLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUNqRyxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNwQixDQUFDO0lBQ0gsQ0FBQztJQUVELElBQUksYUFBYTtRQUNmLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUM3QixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7O09BV0c7SUFDSCxJQUFvRSxVQUFVLENBQUMsS0FBYztRQUMzRixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUN6QixJQUFJLENBQUMsc0JBQXNCLEdBQUcsS0FBSyxDQUFDO0lBQ3RDLENBQUM7SUFFRCxJQUFJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNILElBQThCLFlBQVksQ0FBQyxLQUFhO1FBQ3RELE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBTSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFN0MsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLG9DQUFvQyxDQUFDO0lBQ25ILENBQUM7SUFFRCxJQUFJLFlBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDNUIsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FvQ0c7SUFDSCxJQUF5QixRQUFRLENBQUMsS0FBNEI7UUFDNUQsSUFBSSxLQUFLLFlBQVksTUFBTSxJQUFJLENBQUMsQ0FBQyxLQUFLLFlBQVksS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN6RCxJQUFJLENBQUMsU0FBUyxHQUFHO2dCQUNmLEdBQUcsNEJBQTRCLENBQUMsZUFBZSxDQUFDO2dCQUNoRCxHQUFHLDRCQUE0QixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7Z0JBQzlDLEdBQUcsS0FBSzthQUNULENBQUM7UUFDSixDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxTQUFTLEdBQUcsNEJBQTRCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQy9ELENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsU0FBUyxJQUFJLDRCQUE0QixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7T0FVRztJQUNILElBQXlCLFFBQVEsQ0FBQyxRQUFpQjtRQUNqRCxJQUFJLENBQUMsU0FBUyxHQUFRLFFBQVEsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDMUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxJQUFJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ3VCLFlBQVksR0FBWSxLQUFLLENBQUM7SUFFeEQ7Ozs7Ozs7O09BUUc7SUFDSCxJQUF5QixRQUFRLENBQUMsUUFBaUI7UUFDakQsSUFBSSxDQUFDLFNBQVMsR0FBUSxRQUFRLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzFFLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUVyQixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNILElBQTRCLFVBQVUsQ0FBQyxVQUFtQjtRQUN4RCxJQUFJLENBQUMsV0FBVyxHQUFRLFVBQVUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDbEYsQ0FBQztJQUVELElBQUksVUFBVTtRQUNaLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMxQixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQTJCRztJQUNILElBQXdCLE9BQU8sQ0FBQyxPQUF5QztRQUN2RSxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSCxJQUFxQixJQUFJLENBQUMsSUFBYTtRQUNyQyxJQUFJLENBQUMsS0FBSyxHQUFRLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFOUQsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0gsSUFBNEIsVUFBVSxDQUFDLFVBQW1DO1FBQ3hFLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxJQUFJLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLHVCQUF1QixDQUFDLFVBQVUsQ0FBQztRQUMzRyxRQUFRLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQztZQUNwQyxLQUFLLFlBQVk7Z0JBQ2YsSUFBSSxDQUFDLFdBQVcsR0FBRyx1QkFBdUIsQ0FBQyxVQUFVLENBQUM7Z0JBQ3RELE1BQU07WUFDUixLQUFLLFVBQVU7Z0JBQ2IsSUFBSSxDQUFDLFdBQVcsR0FBRyx1QkFBdUIsQ0FBQyxRQUFRLENBQUM7Z0JBQ3BELE1BQU07WUFDUixLQUFLLFVBQVU7Z0JBQ2IsSUFBSSxDQUFDLFdBQVcsR0FBRyx1QkFBdUIsQ0FBQyxRQUFRLENBQUM7Z0JBQ3BELE1BQU07UUFDVixDQUFDO0lBQ0gsQ0FBQztJQUVELElBQUksVUFBVTtRQUNaLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMxQixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7O09BV0c7SUFDSCxJQUE0QixVQUFVLENBQUMsS0FBYTtRQUNsRCxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxrQ0FBa0MsQ0FBQztRQUV0RSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLFFBQVEsQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUMzRCxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQzdDLENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBSSxVQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7T0FXRztJQUNILElBQTRCLFVBQVUsQ0FBQyxLQUFhO1FBQ2xELElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLGtDQUFrQyxDQUFDO1FBRXRFLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzNELElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDN0MsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUVELFlBQVksZUFBa0M7UUFDNUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxlQUFlLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUNyRCxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3RDLENBQUM7UUFFRCxJQUFJLENBQUMsYUFBYTthQUNmLElBQUksQ0FDSCxZQUFZLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUMvQixvQkFBb0IsRUFBRSxFQUN0QixHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFDMUMsU0FBUyxDQUFDLENBQUMsTUFBYyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQ3ZELEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUM1QzthQUNBLFNBQVMsRUFBRSxDQUFDO1FBRWYsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7UUFDakMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELFVBQVUsQ0FBQyxPQUFxQztRQUM5QyxJQUFJLFFBQVEsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUNoQyxJQUFJLENBQUMsT0FBTyxHQUErQixPQUFPLENBQUM7UUFDckQsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7WUFDbkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBUyxPQUFPLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDbkYsQ0FBQztRQUVELElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO0lBQzVCLENBQUM7SUFFRCxtQkFBbUI7UUFDakIsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDeEMsMkNBQTJDLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDM0UscUNBQXFDLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDckUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUV0QyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDZCxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUN2RCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxPQUFPO1FBQ3hCLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDdkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztnQkFDN0IsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3BELENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxVQUFVLENBQUMsT0FBeUM7UUFDbEQsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNaLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxPQUFPLENBQUM7UUFDeEMsQ0FBQztJQUNILENBQUM7SUFFRCxZQUFZLENBQUMsZUFBaUQ7UUFDNUQsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztZQUMvRCxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3BDLENBQUM7SUFDSCxDQUFDO0lBRUQsV0FBVyxDQUFDLGVBQWU7UUFDekIsSUFBSSxlQUFlLElBQUksSUFBSSxDQUFDLGVBQWUsS0FBSyxlQUFlLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDdkUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDcEMsQ0FBQztRQUNELElBQUksQ0FBQyxlQUFlLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDekUsQ0FBQztJQUVELG9CQUFvQixDQUFDLGVBQWlEO1FBQ3BFLE9BQU8sZUFBZSxJQUFJLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNqSCxDQUFDO0lBRUQsZUFBZSxDQUFDLEtBQUs7UUFDbkIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDO1FBQ2xGLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDbkMsQ0FBQztJQUVELGFBQWEsQ0FBQyxNQUFjLEVBQUUsT0FBeUMsRUFBRSxVQUFtQztRQUMxRyxJQUFJLE1BQU0sSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3hDLE1BQU0sVUFBVSxHQUFxQyxFQUFFLENBQUM7WUFDeEQsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDdkIsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDO29CQUM5RSxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUMxQixDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsc0JBQXNCLEdBQUcsVUFBVSxDQUFDO1FBQzNDLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLHNCQUFzQixHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQztRQUM3QyxDQUFDO0lBQ0gsQ0FBQztJQUVELGFBQWEsQ0FBQyxNQUFjLEVBQUUsTUFBMkIsRUFBRSxVQUFtQztRQUM1RixRQUFRLFVBQVUsRUFBRSxDQUFDO1lBQ25CLEtBQUssdUJBQXVCLENBQUMsVUFBVTtnQkFDckMsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztZQUN6QyxLQUFLLHVCQUF1QixDQUFDLFFBQVE7Z0JBQ25DLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDdkMsS0FBSyx1QkFBdUIsQ0FBQyxRQUFRO2dCQUNuQyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3pDLENBQUM7SUFDSCxDQUFDO0lBRUQsVUFBVSxDQUFDLE1BQWMsRUFBRSxNQUEyQjtRQUNwRCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQ2hGLENBQUM7SUFFRCxRQUFRLENBQUMsTUFBYyxFQUFFLE1BQTJCO1FBQ2xELE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDbEYsQ0FBQztJQUVELFFBQVEsQ0FBQyxNQUFjLEVBQUUsTUFBMkI7UUFDbEQsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUM5RSxDQUFDO0lBRUQsUUFBUSxDQUFDLENBQWtCO1FBQ3pCLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMxRCxPQUFPO2dCQUNMLFFBQVEsRUFBRTtvQkFDUixLQUFLLEVBQUUsS0FBSztpQkFDYjthQUNGLENBQUM7UUFDSixDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQscUJBQXFCLENBQUMsVUFBc0IsRUFBRSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU87UUFDbEUsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7UUFFMUIsSUFBSSxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxlQUFlLEdBQUcsU0FBUyxDQUFDO1FBQ25DLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsZUFBZSxHQUFHLFVBQVUsQ0FBQztRQUNwQyxDQUFDO2FBQU0sQ0FBQztZQUNOLFVBQVUsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUU7Z0JBQzdCLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7b0JBQ3ZCLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7d0JBQzNELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUNwQyxDQUFDO2dCQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELFVBQVUsQ0FBQyxNQUFXO1FBQ3BCLE1BQU0sR0FBRyxNQUFNLElBQUksRUFBRSxDQUFDO1FBRXRCLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLDhCQUE4QixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUNoRyxJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ3BDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQzFDLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQzthQUFNLENBQUM7WUFDTiw4RUFBOEU7WUFDOUUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFaEYsSUFBSSxJQUFJLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDeEUsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDMUMsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsOENBQThDO0lBQzlDLGdFQUFnRTtJQUNoRSxnQkFBZ0IsQ0FBQyxVQUFtQjtRQUNsQyxJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztJQUM3QixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsRUFBTztRQUN0QixJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsaUJBQWlCLENBQUMsRUFBTztRQUN2QixJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQseUJBQXlCLENBQUMsRUFBYztRQUN0QyxJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRU8seUJBQXlCO1FBQy9CLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN2RCxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDeEIsTUFBTSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUN2QyxNQUFNLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDekMsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztJQUVPLGFBQWE7UUFDbkIsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3pCLENBQUM7SUFDSCxDQUFDO29GQTVwQm1CLDBCQUEwQjs2REFBMUIsMEJBQTBCLHdEQVlILGdCQUFnQix1U0FpRFgsZ0JBQWdCLHlIQW1DakIsZ0JBQWdCLDJHQXdGbkIsZ0JBQWdCOztpRkF4THhDLDBCQUEwQjtjQUQvQyxTQUFTO2tEQWF1RCxTQUFTO2tCQUF2RSxLQUFLO21CQUFDLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7WUFHM0MsS0FBSztrQkFBdEIsS0FBSzttQkFBQyxTQUFTO1lBR0MsSUFBSTtrQkFBcEIsS0FBSzttQkFBQyxRQUFRO1lBZU0sUUFBUTtrQkFBNUIsS0FBSzttQkFBQyxZQUFZO1lBR0ssV0FBVztrQkFBbEMsS0FBSzttQkFBQyxlQUFlO1lBV1MsaUJBQWlCO2tCQUEvQyxLQUFLO21CQUFDLHNCQUFzQjtZQUdkLElBQUk7a0JBQWxCLEtBQUs7bUJBQUMsTUFBTTtZQVd1RCxhQUFhO2tCQUFoRixLQUFLO21CQUFDLEVBQUUsS0FBSyxFQUFFLG1CQUFtQixFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtZQVlsQyxpQkFBaUI7a0JBQWhELEtBQUs7bUJBQUMsdUJBQXVCO1lBU1YsTUFBTTtrQkFBekIsTUFBTTttQkFBQyxVQUFVO1lBY2lELFNBQVM7a0JBQTNFLEtBQUs7bUJBQUMsRUFBRSxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO1lBZ0VsQyxhQUFhO2tCQUEzQyxLQUFLO21CQUFDLGtCQUFrQjtZQXdCMkMsVUFBVTtrQkFBN0UsS0FBSzttQkFBQyxFQUFFLEtBQUssRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO1lBbUJoQyxZQUFZO2tCQUF6QyxLQUFLO21CQUFDLGlCQUFpQjtZQStDQyxRQUFRO2tCQUFoQyxLQUFLO21CQUFDLFlBQVk7WUEyQk0sUUFBUTtrQkFBaEMsS0FBSzttQkFBQyxZQUFZO1lBZU8sWUFBWTtrQkFBckMsS0FBSzttQkFBQyxpQkFBaUI7WUFXQyxRQUFRO2tCQUFoQyxLQUFLO21CQUFDLFlBQVk7WUFvQlMsVUFBVTtrQkFBckMsS0FBSzttQkFBQyxlQUFlO1lBb0NFLE9BQU87a0JBQTlCLEtBQUs7bUJBQUMsV0FBVztZQWtCRyxJQUFJO2tCQUF4QixLQUFLO21CQUFDLFFBQVE7WUFvQmEsVUFBVTtrQkFBckMsS0FBSzttQkFBQyxlQUFlO1lBK0JNLFVBQVU7a0JBQXJDLEtBQUs7bUJBQUMsZUFBZTtZQXdCTSxVQUFVO2tCQUFyQyxLQUFLO21CQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBWYWxpZGF0b3IsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgc3dpdGNoTWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IHBvTG9jYWxlRGVmYXVsdCB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3BvLWxhbmd1YWdlL3BvLWxhbmd1YWdlLmNvbnN0YW50JztcbmltcG9ydCB7IFBvTGFuZ3VhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcG8tbGFuZ3VhZ2UvcG8tbGFuZ3VhZ2Uuc2VydmljZSc7XG5pbXBvcnQge1xuICBjb252ZXJ0VG9Cb29sZWFuLFxuICBpc1R5cGVvZixcbiAgcmVtb3ZlRHVwbGljYXRlZE9wdGlvbnNXaXRoRmllbGRWYWx1ZSxcbiAgcmVtb3ZlVW5kZWZpbmVkQW5kTnVsbE9wdGlvbnNXaXRoRmllbGRWYWx1ZSxcbiAgc29ydE9wdGlvbnNCeVByb3BlcnR5XG59IGZyb20gJy4uLy4uLy4uL3V0aWxzL3V0aWwnO1xuaW1wb3J0IHsgcmVxdWlyZWRGYWlsZWQgfSBmcm9tICcuLy4uL3ZhbGlkYXRvcnMnO1xuXG5pbXBvcnQgeyBQb011bHRpc2VsZWN0RmlsdGVyTW9kZSB9IGZyb20gJy4vcG8tbXVsdGlzZWxlY3QtZmlsdGVyLW1vZGUuZW51bSc7XG5pbXBvcnQgeyBQb011bHRpc2VsZWN0RmlsdGVyIH0gZnJvbSAnLi9wby1tdWx0aXNlbGVjdC1maWx0ZXIuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvTXVsdGlzZWxlY3RGaWx0ZXJTZXJ2aWNlIH0gZnJvbSAnLi9wby1tdWx0aXNlbGVjdC1maWx0ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBQb011bHRpc2VsZWN0TGl0ZXJhbHMgfSBmcm9tICcuL3BvLW11bHRpc2VsZWN0LWxpdGVyYWxzLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQb011bHRpc2VsZWN0T3B0aW9uIH0gZnJvbSAnLi9wby1tdWx0aXNlbGVjdC1vcHRpb24uaW50ZXJmYWNlJztcblxuY29uc3QgUE9fTVVMVElTRUxFQ1RfREVCT1VOQ0VfVElNRV9ERUZBVUxUID0gNDAwO1xuY29uc3QgUE9fTVVMVElTRUxFQ1RfRklFTERfTEFCRUxfREVGQVVMVCA9ICdsYWJlbCc7XG5jb25zdCBQT19NVUxUSVNFTEVDVF9GSUVMRF9WQUxVRV9ERUZBVUxUID0gJ3ZhbHVlJztcblxuZXhwb3J0IGNvbnN0IHBvTXVsdGlzZWxlY3RMaXRlcmFsc0RlZmF1bHQgPSB7XG4gIGVuOiA8UG9NdWx0aXNlbGVjdExpdGVyYWxzPntcbiAgICBub0RhdGE6ICdObyBkYXRhIGZvdW5kJyxcbiAgICBwbGFjZWhvbGRlclNlYXJjaDogJ1NlYXJjaCcsXG4gICAgc2VsZWN0QWxsOiAnU2VsZWN0IGFsbCcsXG4gICAgc2VsZWN0SXRlbTogJ1NlbGVjdCBpdGVtcydcbiAgfSxcbiAgZXM6IDxQb011bHRpc2VsZWN0TGl0ZXJhbHM+e1xuICAgIG5vRGF0YTogJ0RhdG9zIG5vIGVuY29udHJhZG9zJyxcbiAgICBwbGFjZWhvbGRlclNlYXJjaDogJ0J1c2NhJyxcbiAgICBzZWxlY3RBbGw6ICdTZWxlY2Npb25hciB0b2RvJyxcbiAgICBzZWxlY3RJdGVtOiAnU2VsZWNjaW9uYXIgaXRlbXMnXG4gIH0sXG4gIHB0OiA8UG9NdWx0aXNlbGVjdExpdGVyYWxzPntcbiAgICBub0RhdGE6ICdOZW5odW0gZGFkbyBlbmNvbnRyYWRvJyxcbiAgICBwbGFjZWhvbGRlclNlYXJjaDogJ0J1c2NhcicsXG4gICAgc2VsZWN0QWxsOiAnU2VsZWNpb25hciB0b2RvcycsXG4gICAgc2VsZWN0SXRlbTogJ1NlbGVjaW9uYXIgaXRlbnMnXG4gIH0sXG4gIHJ1OiA8UG9NdWx0aXNlbGVjdExpdGVyYWxzPntcbiAgICBub0RhdGE6ICfQlNCw0L3QvdGL0LUg0L3QtSDQvdCw0LnQtNC10L3RiycsXG4gICAgcGxhY2Vob2xkZXJTZWFyY2g6ICfQuNGB0LrQsNGC0YwnLFxuICAgIHNlbGVjdEFsbDogJ9CS0YvQsdGA0LDRgtGMINCy0YHQtScsXG4gICAgc2VsZWN0SXRlbTogJ9CS0YvQsdGA0LDRgtGMINGN0LvQtdC80LXQvdGC0YsnXG4gIH1cbn07XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uXG4gKlxuICogTyBwby1tdWx0aXNlbGVjdCDDqSB1bSBjb21wb25lbnRlIGRlIG3Dumx0aXBsYSBzZWxlw6fDo28uXG4gKiBFc3RlIGNvbXBvbmVudGUgw6kgcmVjb21lbmRhZG8gcGFyYSBkYXIgYW8gdXN1w6FyaW8gYSBvcMOnw6NvIGRlIHNlbGVjaW9uYXIgdsOhcmlvcyBpdGVucyBlbSB1bWEgbGlzdGEuXG4gKlxuICogUXVhbmRvIGEgbGlzdGEgcG9zc3VpciBwb3Vjb3MgaXRlbnMsIGRldmUtc2UgZGFyIHByZWZlcsOqbmNpYSBwYXJhIG8gdXNvIGRvIHBvLWNoZWNrYm94LWdyb3VwLCBwb3Igc2VyIG1haXMgc2ltcGxlc1xuICogZSBtYWlzIHLDoXBpZG8gcGFyYSBhIHNlbGXDp8OjbyBkbyB1c3XDoXJpby5cbiAqXG4gKiBFc3RlIGNvbXBvbmVudGUgdGFtYsOpbSBuw6NvIGRldmUgc2VyIHV0aWxpemFkbyBlbSBjYXNvcyBvbmRlIGEgc2VsZcOnw6NvIHNlamEgw7puaWNhLiBOZXNzZXMgY2Fzb3MsIGRldmUtc2UgdXRpbGl6YXIgb1xuICogcG8tc2VsZWN0LCBwby1jb21ibyBvdSBwby1yYWRpby1ncm91cC5cbiAqXG4gKiBDb20gZWxlIHRhbWLDqW0gw6kgcG9zc8OtdmVsIGRlZmluaXIgdW1hIGxpc3RhIMOgIHBhcnRpciBkYSByZXF1aXNpw6fDo28gZGUgdW0gc2VydmnDp28gZGVmaW5pZG8gZW0gYHAtZmlsdGVyLXNlcnZpY2VgLlxuICpcbiAqICMjIyMgQm9hcyBwcsOhdGljYXNcbiAqXG4gKiAtIENhc28gYSBsaXN0YSBhcHJlc2VudGUgbWVub3MgZGUgNSBpdGVucywgY29uc2lkZXJlIHV0aWxpemFyIG91dHJvIGNvbXBvbmVudGU7XG4gKiAtIE7Do28gdXRpbGl6ZSBvIG11bHRpc2VsZWN0IGNhc28gbyB1c3XDoXJpbyBwb3NzYSBzZWxlY2lvbmFyIGFwZW5hcyB1bWEgb3DDp8Ojby4gUGFyYSBlc3NlIGNhc28sIG9wdGUgcG9yIHV0aWxpemFyIHBvLXJhZGlvIG91IHBvLXNlbGVjdDtcbiAqIC0gU2VtcHJlIHF1ZSBwb3Nzw612ZWwsIGFncnVwZSBhcyBvcMOnw7VlcyBlIHVzZSBsYWJlbHMgY3VydGFzIHBhcmEgZGVzY3JldmVyIG8gY29udGXDumRvLiBFeGVtcGxvOiBlbSB1bWEgY29tYmluYcOnw6NvIGRlIGFsaW1lbnRvcyxcbiAqIGFzIG9ww6fDtWVzIHBvZGVtIHNlciBhZ3J1cGFkYXMgcG9yIFZlZ2V0YWlzLCBGcnV0YXMsIGV0YztcbiAqXG4gKiAjIyMjIEFjZXNzaWJpbGlkYWRlIHRyYXRhZGEgbm8gY29tcG9uZW50ZVxuICpcbiAqIEFsZ3VtYXMgZGlyZXRyaXplcyBkZSBhY2Vzc2liaWxpZGFkZSBqw6Egc8OjbyB0cmF0YWRhcyBubyBjb21wb25lbnRlIGludGVybmFtZW50ZSwgZSBuw6NvIHBvZGVtIHNlciBhbHRlcmFkYXMgcGVsbyBwcm9wcmlldMOhcmlvIGRvIGNvbnRlw7pkby4gU8OjbyBlbGFzOlxuICpcbiAqIC0gUXVhbmRvIGVtIGZvY28sIG8gbXVsdGlzZWxlY3QgYWJyZSBvIGxpc3Rib3ggdXNhbmRvIGFzIHRlY2xhcyBkZSBFc3Bhw6dvIG91IEVudGVyIGRvIHRlY2xhZG8uXG4gKiAtIFV0aWxpemUgYXMgdGVjbGFzIEFycm93IFVwIFtzZXRhIHBhcmEgY2ltYV0gb3UgQXJyb3cgRG93biBbc2V0YSBwYXJhIGJhaXhvXSBkbyB0ZWNsYWRvIHBhcmEgbmF2ZWdhciBlbnRyZSBvcyBpdGVucyBkbyBsaXN0Ym94LlxuICogLSBVdGlsaXplIGEgdGVjbGEgRXNjIGRvIHRlY2xhZG8gcGFyYSBmZWNoYXIgbyBsaXN0Ym94LlxuICogLSBRdWFuZG8gdW0gaXRlbSBlc3RpdmVyIGVtIGZvY28sIHV0aWxpemUgYXMgdGVjbGFzIEFycm93IFJpZ2h0IFtzZXRhIHBhcmEgZGlyZWl0YV0gb3UgQXJyb3cgTGVmdCBbc2V0YSBwYXJhIGVzcXVlcmRhXSBkbyB0ZWNsYWRvIHBhcmEgbmF2ZWdhciBlbnRyZSBlbGVzLlxuICogLSBRdWFuZG8gZW0gZm9jbyBlIGhhdmVuZG8gdW0gaXRlbSBvdSBtYWlzIGrDoSBzZWxlY2lvbmFkbywgdXRpbGl6ZSBhIHRlY2xhIEFycm93IERvd24gW3NldGEgcGFyYSBiYWl4b10gZG8gdGVjbGFkbyBwYXJhIGFicmlyIG8gbGlzdGJveC5cbiAqXG4gKiAjIyMjIFRva2VucyBjdXN0b21pesOhdmVpc1xuICpcbiAqIMOJIHBvc3PDrXZlbCBhbHRlcmFyIG8gZXN0aWxvIGRvIGNvbXBvbmVudGUgdXNhbmRvIG9zIHNlZ3VpbnRlcyB0b2tlbnMgKENTUyk6XG4gKlxuICogPiBQYXJhIG1haW9yZXMgaW5mb3JtYcOnw7VlcywgYWNlc3NlIG8gZ3VpYSBbUGVyc29uYWxpemFuZG8gbyBUZW1hIFBhZHLDo28gY29tIFRva2VucyBDU1NdKGh0dHBzOi8vcG8tdWkuaW8vZ3VpZGVzL3RoZW1lLWN1c3RvbWl6YXRpb24pLlxuICpcbiAqIHwgUHJvcHJpZWRhZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBEZXNjcmnDp8OjbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVmFsb3IgUGFkcsOjbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8ICoqRGVmYXVsdCBWYWx1ZXMqKiAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgYC0tZm9udC1mYW1pbHlgICAgICAgICAgICAgICAgICAgICAgICAgfCBGYW3DrWxpYSB0aXBvZ3LDoWZpY2EgdXNhZGEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYHZhcigtLWZvbnQtZmFtaWx5LXRoZW1lKWAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8IGAtLWZvbnQtc2l6ZWAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVGFtYW5obyBkYSBmb250ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBgdmFyKC0tZm9udC1zaXplLWRlZmF1bHQpYCAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgYC0tdGV4dC1jb2xvci1wbGFjZWhvbGRlcmAgJm5ic3A7ICAgICAgfCBDb3IgZG8gdGV4dG8gZG8gcGxhY2Vob2xkZXIgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGB2YXIoLS1jb2xvci1hY3Rpb24tZGlzYWJsZWQpYCAgICAgICAgICAgICAgICAgICAgfFxuICogfCBgLS1jb2xvcmAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IENvciBwcmluY2lwYWwgZG8gbXVsdGlzZWxlY3QgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYHZhcigtLWNvbG9yLW5ldXRyYWwtZGFyay03MClgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8IGAtLWJhY2tncm91bmRgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ29yIGRlIGJhY2tncm91bmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBgdmFyKC0tY29sb3ItbmV1dHJhbC1saWdodC0wNSlgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgKipIb3ZlcioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCBgLS1jb2xvci1ob3ZlcmAgICAgICAgICAgICAgICAgICAgICAgICB8IENvciBwcmluY2lwYWwgbm8gZXN0YWRvIGhvdmVyICAgICAgICAgICAgICAgICAgICAgICAgIHwgYHZhcigtLWNvbG9yLWFjdGlvbi1ob3ZlcilgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8IGAtLWJhY2tncm91bmQtaG92ZXJgICAgICAgICAgICAgICAgICAgIHwgQ29yIGRlIGJhY2tncm91bmQgbm8gZXN0YWRvIGhvdmVyICAgICAgICAgICAgICAgICAgICAgfCBgdmFyKC0tY29sb3ItYnJhbmQtMDEtbGlnaHRlcilgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgKipGb2N1c2VkKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCBgLS1jb2xvci1mb2N1c2VkYCAgICAgICAgICAgICAgICAgICAgICB8IENvciBwcmluY2lwYWwgbm8gZXN0YWRvIGRlIGZvY3VzICAgICAgICAgICAgICAgICAgICAgIHwgYHZhcigtLWNvbG9yLWFjdGlvbi1kZWZhdWx0KWAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8IGAtLW91dGxpbmUtY29sb3ItZm9jdXNlZGAgJm5ic3A7ICAgICAgIHwgQ29yIGRvIG91dGxpbmUgZG8gZXN0YWRvIGRlIGZvY3VzICAgICAgICAgICAgICAgICAgICAgfCBgdmFyKC0tY29sb3ItYWN0aW9uLWZvY3VzKWAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgKipEaXNhYmxlZCoqICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCBgLS1jb2xvci1kaXNhYmxlZGAgICAgICAgICAgICAgICAgICAgICB8IENvciBwcmluY2lwYWwgbm8gZXN0YWRvIGRpc2FibGVkICAgICAgICAgICAgICAgICAgICAgIHwgYHZhcigtLWNvbG9yLWFjdGlvbi1kaXNhYmxlZClgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8IGAtLWJhY2tncm91bmQtZGlzYWJsZWRgICZuYnNwOyAgICAgICAgIHwgQ29yIGRlIGJhY2tncm91bmQgbm8gZXN0YWRvIGRpc2FibGVkICZuYnNwOyAgICAgICAgICAgfCBgdmFyKC0tY29sb3ItbmV1dHJhbC1saWdodC0yMClgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgKipFcnJvcioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCBgLS1jb2xvci1lcnJvcmAgICAgICAgICAgICAgICAgICAgICAgICB8IENvciBwcmluY2lwYWwgbm8gZXN0YWRvIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgIHwgYHZhcigtLWNvbG9yLWZlZWRiYWNrLW5lZ2F0aXZlLWJhc2UpYCAgICAgICAgICAgICB8XG4gKlxuICovXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBQb011bHRpc2VsZWN0QmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBPbkluaXQsIFZhbGlkYXRvciB7XG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIEFwbGljYSBmb2NvIG5vIGVsZW1lbnRvIGFvIHNlciBpbmljaWFkby5cbiAgICpcbiAgICogPiBDYXNvIG1haXMgZGUgdW0gZWxlbWVudG8gc2VqYSBjb25maWd1cmFkbyBjb20gZXNzYSBwcm9wcmllZGFkZSwgYXBlbmFzIG8gw7psdGltbyBlbGVtZW50byBkZWNsYXJhZG8gY29tIGVsYSB0ZXLDoSBvIGZvY28uXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dCh7IGFsaWFzOiAncC1hdXRvLWZvY3VzJywgdHJhbnNmb3JtOiBjb252ZXJ0VG9Cb29sZWFuIH0pIGF1dG9Gb2N1czogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBMYWJlbCBubyBjb21wb25lbnRlLiAqL1xuICBASW5wdXQoJ3AtbGFiZWwnKSBsYWJlbD86IHN0cmluZztcblxuICAvKiogVGV4dG8gZGUgYXBvaW8gcGFyYSBvIGNhbXBvLiAqL1xuICBASW5wdXQoJ3AtaGVscCcpIGhlbHA/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRGVmaW5lIHNlIGEgaW5kaWNhw6fDo28gZGUgY2FtcG8gb3BjaW9uYWwgc2Vyw6EgZXhpYmlkYS5cbiAgICpcbiAgICogPiBOw6NvIHNlcsOhIGV4aWJpZGEgYSBpbmRpY2HDp8OjbyBzZTpcbiAgICogLSBPIGNhbXBvIGNvbnRlciBgcC1yZXF1aXJlZGA7XG4gICAqIC0gTsOjbyBwb3NzdWlyIGBwLWhlbHBgIGUvb3UgYHAtbGFiZWxgLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoJ3Atb3B0aW9uYWwnKSBvcHRpb25hbDogYm9vbGVhbjtcblxuICAvKiogTWVuc2FnZW0gYXByZXNlbnRhZGEgZW5xdWFudG8gbyBjYW1wbyBlc3RpdmVyIHZhemlvLiAqL1xuICBASW5wdXQoJ3AtcGxhY2Vob2xkZXInKSBwbGFjZWhvbGRlcj86IHN0cmluZyA9ICcnO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogUGxhY2Vob2xkZXIgZG8gY2FtcG8gZGUgcGVzcXVpc2EuXG4gICAqXG4gICAqID4gQ2FzbyBvIG1lc21vIG7Do28gc2VqYSBpbmZvcm1hZG8sIG8gdmFsb3IgcGFkcsOjbyBzZXLDoSB0cmFkdXppZG8gY29tIGJhc2Ugbm8gaWRpb21hIGRvIG5hdmVnYWRvciAocHQsIGVzIGUgZW4pLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgQnVzY2FyYFxuICAgKi9cbiAgQElucHV0KCdwLXBsYWNlaG9sZGVyLXNlYXJjaCcpIHBsYWNlaG9sZGVyU2VhcmNoPzogc3RyaW5nID0gJyc7XG5cbiAgLyoqIE5vbWUgZG8gY29tcG9uZW50ZS4gKi9cbiAgQElucHV0KCduYW1lJykgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIEluZGljYSBzZSBvIGNhbXBvIFwiU2VsZWNpb25hciB0b2Rvc1wiIHNlcsOhIGVzY29uZGlkby5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KHsgYWxpYXM6ICdwLWhpZGUtc2VsZWN0LWFsbCcsIHRyYW5zZm9ybTogY29udmVydFRvQm9vbGVhbiB9KSBoaWRlU2VsZWN0QWxsPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBFeGliZSBhIG1lbnNhZ2VtIHNldGFkYSBzZSBvIGNhbXBvIGVzdGl2ZXIgdmF6aW8gZSBmb3IgcmVxdWVyaWRvLlxuICAgKlxuICAgKiA+IE5lY2Vzc8OhcmlvIHF1ZSBhIHByb3ByaWVkYWRlIGBwLXJlcXVpcmVkYCBlc3RlamEgaGFiaWxpdGFkYS5cbiAgICpcbiAgICovXG4gIEBJbnB1dCgncC1maWVsZC1lcnJvci1tZXNzYWdlJykgZmllbGRFcnJvck1lc3NhZ2U6IHN0cmluZztcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBQb2RlIHNlciBpbmZvcm1hZGEgdW1hIGZ1bsOnw6NvIHF1ZSBzZXLDoSBkaXNwYXJhZGEgcXVhbmRvIGhvdXZlciBhbHRlcmHDp8O1ZXMgbm8gbmdNb2RlbC5cbiAgICovXG4gIEBPdXRwdXQoJ3AtY2hhbmdlJykgY2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIERlZmluZSBxdWUgbyBkcm9wZG93biBkbyBtdWx0aXNlbGVjdCBzZXLDoSBpbmNsdWlkbyBubyBib2R5IGRhIHDDoWdpbmEgZSBuw6NvIHN1c3BlbnNvIGNvbSBhIGNhaXhhIGRlIHRleHRvIGRvIGNvbXBvbmVudGUuXG4gICAqIE9ww6fDo28gbmVjZXNzw6FyaWEgcGFyYSBvIGNhc28gZGUgdXNvIGRvIGNvbXBvbmVudGUgZW0gcMOhZ2luYXMgcXVlIG5lY2Vzc2l0YW0gcmVuZGVyaXphciBvIG11bHRpc2VsZWN0IGZvcmEgZG8gY29udGXDumRvIHByaW5jaXBhbC5cbiAgICpcbiAgICogPiBPYnM6IE8gdXNvIGRlc3NhIHByb3ByaWVkYWRlIHBvZGUgYWNhcnJldGFyIG5hIHBlcmRhIHNlcXVlbmNpYWwgZGEgdGFidWxhw6fDo28gZGEgcMOhZ2luYVxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoeyBhbGlhczogJ3AtYXBwZW5kLWluLWJvZHknLCB0cmFuc2Zvcm06IGNvbnZlcnRUb0Jvb2xlYW4gfSkgYXBwZW5kQm94PzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHNlbGVjdGVkT3B0aW9uczogQXJyYXk8UG9NdWx0aXNlbGVjdE9wdGlvbiB8IGFueT4gPSBbXTtcbiAgdmlzaWJsZU9wdGlvbnNEcm9wZG93bjogQXJyYXk8UG9NdWx0aXNlbGVjdE9wdGlvbiB8IGFueT4gPSBbXTtcbiAgdmlzaWJsZVRhZ3MgPSBbXTtcbiAgaXNTZXJ2ZXJTZWFyY2hpbmcgPSBmYWxzZTtcbiAgaXNGaXJzdEZpbHRlcjogYm9vbGVhbiA9IHRydWU7XG4gIGZpbHRlclN1YmplY3QgPSBuZXcgU3ViamVjdCgpO1xuICBzZXJ2aWNlOiBQb011bHRpc2VsZWN0RmlsdGVyU2VydmljZTtcbiAgZGVmYXVsdFNlcnZpY2U6IFBvTXVsdGlzZWxlY3RGaWx0ZXJTZXJ2aWNlO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICBwcm90ZWN0ZWQgb25Nb2RlbFRvdWNoZWQ6IGFueSA9IG51bGw7XG5cbiAgcHJvdGVjdGVkIGNsaWNrT3V0TGlzdGVuZXI6ICgpID0+IHZvaWQ7XG4gIHByb3RlY3RlZCByZXNpemVMaXN0ZW5lcjogKCkgPT4gdm9pZDtcbiAgcHJvdGVjdGVkIGdldE9iamVjdHNCeVZhbHVlc1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gIHByaXZhdGUgX2ZpbHRlclNlcnZpY2U/OiBQb011bHRpc2VsZWN0RmlsdGVyIHwgc3RyaW5nO1xuICBwcml2YXRlIF9kZWJvdW5jZVRpbWU/OiBudW1iZXIgPSA0MDA7XG4gIHByaXZhdGUgX2Rpc2FibGVkPzogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9maWx0ZXJNb2RlPzogUG9NdWx0aXNlbGVjdEZpbHRlck1vZGUgPSBQb011bHRpc2VsZWN0RmlsdGVyTW9kZS5zdGFydHNXaXRoO1xuICBwcml2YXRlIF9oaWRlU2VhcmNoPzogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9saXRlcmFsczogUG9NdWx0aXNlbGVjdExpdGVyYWxzO1xuICBwcml2YXRlIF9vcHRpb25zOiBBcnJheTxQb011bHRpc2VsZWN0T3B0aW9uIHwgYW55PjtcbiAgcHJpdmF0ZSBfcmVxdWlyZWQ/OiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX3NvcnQ/OiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2F1dG9IZWlnaHQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfZmllbGRMYWJlbD86IHN0cmluZyA9IFBPX01VTFRJU0VMRUNUX0ZJRUxEX0xBQkVMX0RFRkFVTFQ7XG4gIHByaXZhdGUgX2ZpZWxkVmFsdWU/OiBzdHJpbmcgPSBQT19NVUxUSVNFTEVDVF9GSUVMRF9WQUxVRV9ERUZBVUxUO1xuICBwcml2YXRlIGxhbmd1YWdlOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBsYXN0TGVuZ3RoTW9kZWw7XG4gIHByaXZhdGUgb25Nb2RlbENoYW5nZTogYW55O1xuICBwcml2YXRlIHZhbGlkYXRvckNoYW5nZTogYW55O1xuICBwcml2YXRlIGF1dG9IZWlnaHRJbml0aWFsVmFsdWU6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogTmVzdGEgcHJvcHJpZWRhZGUgcG9kZSBzZXIgaW5mb3JtYWRhIGEgVVJMIGRvIHNlcnZpw6dvIGVtIHF1ZSBzZXLDoSByZWFsaXphZG8gbyBmaWx0cm8gcGFyYSBjYXJyZWdhbWVudG8gZGEgbGlzdGEgZGUgaXRlbnMgbm8gY29tcG9uZW50ZS5cbiAgICpcbiAgICpUYW1iw6ltIGV4aXN0ZSBhIHBvc3NpYmlsaWRhZGUgZGUgaW5mb3JtYXIgdW0gc2VydmnDp28gaW1wbGVtZW50YW5kbyBhIGludGVyZmFjZSBgUG9NdWx0aXNlbGVjdEZpbHRlcmAuXG4gICAqXG4gICAqQ2FzbyB1dGlsaXphZG8gdW1hIFVSTCwgbyBzZXJ2acOnbyBkZXZlIHNlciByZXRvcm5hZG8gbm8gcGFkcsOjbyBbQVBJIFBPIFVJXShodHRwczovL3BvLXVpLmlvL2d1aWRlcy9hcGkpIGUgdXRpbGl6YXIgYXMgcHJvcHJpZWRhZGVzIGBwLWZpZWxkLWxhYmVsYCBlIGBwLWZpZWxkLXZhbHVlYCBwYXJhIGEgY29uc3RydcOnw6NvIGRhIGxpc3RhIGRlIGl0ZW5zLlxuICAgKlxuICAgKlF1YW5kbyB1dGlsaXphZGEgdW1hIFVSTCBkZSBzZXJ2acOnbywgZW50w6NvIHNlcsOhIGNvbmNhdGVuYWRhIG5lc3RhIFVSTCBvIHZhbG9yIHF1ZSBkZXNlamEtc2UgZmlsdHJhciBkYSBzZWd1aW50ZSBmb3JtYTpcbiAgICpcbiAgICpgYGBcbiAgICogLy8gY2FzbyBmaWx0cmFyIHBvciBcIlBldGVyXCJcbiAgICogIGh0dHBzOi8vbG9jYWxob3N0OjgwODAvYXBpL2hlcm9lcz9maWx0ZXI9UGV0ZXJcbiAgICpgYGBcbiAgICpcbiAgICpFIGNhc28gaW5pY2lhciBvIGNhbXBvIGNvbSB2YWxvciwgb3MgaXRlbnMgc2Vyw6NvIGJ1c2NhZG9zIGRhIHNlZ3VpbnRlIGZvcm1hOlxuICAgKlxuICAgKmBgYFxuICAgKiAvLyBjYXNvIG8gdmFsb3IgZG8gY2FtcG8gZm9yIFsxMjM0LCA1Njc4XTtcbiAgICogIGh0dHBzOi8vbG9jYWxob3N0OjgwODAvYXBpL2hlcm9lcz92YWx1ZT0xMjM0LDU2NzhcbiAgICpcbiAgICogLy9PICp2YWx1ZSogw6kgcmVmZXJlbnRlIGFvIGBmaWVsZFZhbHVlYC5cbiAgICpgYGBcbiAgICpcbiAgICovXG4gIEBJbnB1dCgncC1maWx0ZXItc2VydmljZScpIHNldCBmaWx0ZXJTZXJ2aWNlKHZhbHVlOiBQb011bHRpc2VsZWN0RmlsdGVyIHwgc3RyaW5nKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLl9maWx0ZXJTZXJ2aWNlID0gdmFsdWU7XG4gICAgICB0aGlzLmF1dG9IZWlnaHQgPSB0aGlzLmF1dG9IZWlnaHRJbml0aWFsVmFsdWUgIT09IHVuZGVmaW5lZCA/IHRoaXMuYXV0b0hlaWdodEluaXRpYWxWYWx1ZSA6IHRydWU7XG4gICAgICB0aGlzLm9wdGlvbnMgPSBbXTtcbiAgICB9XG4gIH1cblxuICBnZXQgZmlsdGVyU2VydmljZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fZmlsdGVyU2VydmljZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIERlZmluZSBxdWUgYSBhbHR1cmEgZG8gY29tcG9uZW50ZSBzZXLDoSBhdXRvIGFqdXN0w6F2ZWwsIHBvc3N1aW5kbyB1bWEgYWx0dXJhIG1pbmltYSBwb3LDqW0gYSBhbHR1cmEgbcOheGltYSBzZXLDoSBkZSBhY29yZG9cbiAgICogY29tIG8gbsO6bWVybyBkZSBpdGVucyBzZWxlY2lvbmFkb3MgZSBhIGV4dGVuc8OjbyBkb3MgbWVzbW9zLCBtYW50ZW5kby1vcyBzZW1wcmUgdmlzw612ZWlzLlxuICAgKlxuICAgKiA+IE8gdmFsb3IgcGFkcsOjbyBzZXLDoSBgdHJ1ZWAgcXVhbmRvIGhvdXZlciBzZXJ2acOnbyAoYHAtZmlsdGVyLXNlcnZpY2VgKS5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KHsgYWxpYXM6ICdwLWF1dG8taGVpZ2h0JywgdHJhbnNmb3JtOiBjb252ZXJ0VG9Cb29sZWFuIH0pIHNldCBhdXRvSGVpZ2h0KHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fYXV0b0hlaWdodCA9IHZhbHVlO1xuICAgIHRoaXMuYXV0b0hlaWdodEluaXRpYWxWYWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IGF1dG9IZWlnaHQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2F1dG9IZWlnaHQ7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBFc3RhIHByb3ByaWVkYWRlIGRlZmluZSBlbSBxdWFudG8gdGVtcG8gKGVtIG1pbGlzc2VndW5kb3MpLCBhZ3VhcmRhIHBhcmEgYWNpb25hciBvIGV2ZW50byBkZSBmaWx0cm8gYXDDs3MgY2FkYSBwcmVzc2lvbmFtZW50byBkZSB0ZWNsYS5cbiAgICpcbiAgICogPiBTZXLDoSB1dGlsaXphZGEgYXBlbmFzIHF1YW5kbyBob3V2ZXIgc2VydmnDp28gKGBwLWZpbHRlci1zZXJ2aWNlYCkgZSBzb21lbnRlIHNlcsOhIGFjZWl0byB2YWxvciBtYWlvciBkbyBxdWUgKnplcm8qLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgNDAwYFxuICAgKi9cbiAgQElucHV0KCdwLWRlYm91bmNlLXRpbWUnKSBzZXQgZGVib3VuY2VUaW1lKHZhbHVlOiBudW1iZXIpIHtcbiAgICBjb25zdCBwYXJzZWRWYWx1ZSA9IHBhcnNlSW50KDxhbnk+dmFsdWUsIDEwKTtcblxuICAgIHRoaXMuX2RlYm91bmNlVGltZSA9ICFpc05hTihwYXJzZWRWYWx1ZSkgJiYgcGFyc2VkVmFsdWUgPiAwID8gcGFyc2VkVmFsdWUgOiBQT19NVUxUSVNFTEVDVF9ERUJPVU5DRV9USU1FX0RFRkFVTFQ7XG4gIH1cblxuICBnZXQgZGVib3VuY2VUaW1lKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2RlYm91bmNlVGltZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIE9iamV0byBjb20gYXMgbGl0ZXJhaXMgdXNhZGFzIG5vIGBwby1tdWx0aXNlbGVjdGAuXG4gICAqXG4gICAqIEV4aXN0ZW0gZHVhcyBtYW5laXJhcyBkZSBjdXN0b21pemFyIG8gY29tcG9uZW50ZSwgcGFzc2FuZG8gdW0gb2JqZXRvIGNvbSB0b2RhcyBhcyBsaXRlcmFpcyBkaXNwb27DrXZlaXM6XG4gICAqXG4gICAqIGBgYFxuICAgKiAgY29uc3QgY3VzdG9tTGl0ZXJhbHM6IFBvTXVsdGlzZWxlY3RMaXRlcmFscyA9IHtcbiAgICogICAgbm9EYXRhOiAnTmVuaHVtIGRhZG8gZW5jb250cmFkbycsXG4gICAqICAgIHBsYWNlaG9sZGVyU2VhcmNoOiAnQnVzY2FyJyxcbiAgICogICAgc2VsZWN0QWxsOiAnU2VsZWN0IGFsbCcsXG4gICAqICAgIHNlbGVjdEl0ZW06ICdTZWxlY3QgaXRlbXMnXG4gICAqICB9O1xuICAgKiBgYGBcbiAgICpcbiAgICogT3UgcGFzc2FuZG8gYXBlbmFzIGFzIGxpdGVyYWlzIHF1ZSBkZXNlamEgY3VzdG9taXphcjpcbiAgICpcbiAgICogYGBgXG4gICAqICBjb25zdCBjdXN0b21MaXRlcmFsczogUG9NdWx0aXNlbGVjdExpdGVyYWxzID0ge1xuICAgKiAgICBub0RhdGE6ICdTZW0gZGFkb3MnXG4gICAqICB9O1xuICAgKiBgYGBcbiAgICpcbiAgICogRSBwYXJhIGNhcnJlZ2FyIGFzIGxpdGVyYWlzIGN1c3RvbWl6YWRhcywgYmFzdGEgYXBlbmFzIHBhc3NhciBvIG9iamV0byBwYXJhIG8gY29tcG9uZW50ZTpcbiAgICpcbiAgICogYGBgXG4gICAqIDxwby1tdWx0aXNlbGVjdFxuICAgKiAgIFtwLWxpdGVyYWxzXT1cImN1c3RvbUxpdGVyYWxzXCI+XG4gICAqIDwvcG8tcG8tbXVsdGlzZWxlY3Q+XG4gICAqIGBgYFxuICAgKlxuICAgKiA+IE8gb2JqZXRvIHBhZHLDo28gZGUgbGl0ZXJhaXMgc2Vyw6EgdHJhZHV6aWRvIGRlIGFjb3JkbyBjb20gbyBpZGlvbWEgZG9cbiAgICogW2BQb0kxOG5TZXJ2aWNlYF0oL2RvY3VtZW50YXRpb24vcG8taTE4bikgb3UgZG8gYnJvd3Nlci5cbiAgICovXG4gIEBJbnB1dCgncC1saXRlcmFscycpIHNldCBsaXRlcmFscyh2YWx1ZTogUG9NdWx0aXNlbGVjdExpdGVyYWxzKSB7XG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgT2JqZWN0ICYmICEodmFsdWUgaW5zdGFuY2VvZiBBcnJheSkpIHtcbiAgICAgIHRoaXMuX2xpdGVyYWxzID0ge1xuICAgICAgICAuLi5wb011bHRpc2VsZWN0TGl0ZXJhbHNEZWZhdWx0W3BvTG9jYWxlRGVmYXVsdF0sXG4gICAgICAgIC4uLnBvTXVsdGlzZWxlY3RMaXRlcmFsc0RlZmF1bHRbdGhpcy5sYW5ndWFnZV0sXG4gICAgICAgIC4uLnZhbHVlXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9saXRlcmFscyA9IHBvTXVsdGlzZWxlY3RMaXRlcmFsc0RlZmF1bHRbdGhpcy5sYW5ndWFnZV07XG4gICAgfVxuICB9XG5cbiAgZ2V0IGxpdGVyYWxzKCkge1xuICAgIHJldHVybiB0aGlzLl9saXRlcmFscyB8fCBwb011bHRpc2VsZWN0TGl0ZXJhbHNEZWZhdWx0W3RoaXMubGFuZ3VhZ2VdO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRGVmaW5lIHF1ZSBvIGNhbXBvIHNlcsOhIG9icmlnYXTDs3Jpby5cbiAgICpcbiAgICogPiBFc3RhIHByb3ByaWVkYWRlIMOpIGRlc2NvbnNpZGVyYWRhIHF1YW5kbyBvIGlucHV0IGVzdMOhIGRlc2FiaWxpdGFkbyBgKHAtZGlzYWJsZWQpYC5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KCdwLXJlcXVpcmVkJykgc2V0IHJlcXVpcmVkKHJlcXVpcmVkOiBib29sZWFuKSB7XG4gICAgdGhpcy5fcmVxdWlyZWQgPSA8YW55PnJlcXVpcmVkID09PSAnJyA/IHRydWUgOiBjb252ZXJ0VG9Cb29sZWFuKHJlcXVpcmVkKTtcbiAgICB0aGlzLnZhbGlkYXRlTW9kZWwoKTtcbiAgfVxuXG4gIGdldCByZXF1aXJlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcmVxdWlyZWQ7XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lIHNlIGEgaW5kaWNhw6fDo28gZGUgY2FtcG8gb2JyaWdhdMOzcmlvIHNlcsOhIGV4aWJpZGEuXG4gICAqXG4gICAqID4gTsOjbyBzZXLDoSBleGliaWRhIGEgaW5kaWNhw6fDo28gc2U6XG4gICAqIC0gTsOjbyBwb3NzdWlyIGBwLWhlbHBgIGUvb3UgYHAtbGFiZWxgLlxuICAgKi9cbiAgQElucHV0KCdwLXNob3ctcmVxdWlyZWQnKSBzaG93UmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBJbmRpY2EgcXVlIG8gY2FtcG8gc2Vyw6EgZGVzYWJpbGl0YWRvLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoJ3AtZGlzYWJsZWQnKSBzZXQgZGlzYWJsZWQoZGlzYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9kaXNhYmxlZCA9IDxhbnk+ZGlzYWJsZWQgPT09ICcnID8gdHJ1ZSA6IGNvbnZlcnRUb0Jvb2xlYW4oZGlzYWJsZWQpO1xuICAgIHRoaXMudmFsaWRhdGVNb2RlbCgpO1xuXG4gICAgdGhpcy51cGRhdGVWaXNpYmxlSXRlbXMoKTtcbiAgfVxuXG4gIGdldCBkaXNhYmxlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBFc2NvbmRlIG8gY2FtcG8gZGUgcGVzcXVpc2EgZXhpc3RlbnRlIGRlbnRybyBkbyBkcm9wZG93biBkbyBwby1tdWx0aXNlbGVjdC5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KCdwLWhpZGUtc2VhcmNoJykgc2V0IGhpZGVTZWFyY2goaGlkZVNlYXJjaDogYm9vbGVhbikge1xuICAgIHRoaXMuX2hpZGVTZWFyY2ggPSA8YW55PmhpZGVTZWFyY2ggPT09ICcnID8gdHJ1ZSA6IGNvbnZlcnRUb0Jvb2xlYW4oaGlkZVNlYXJjaCk7XG4gIH1cblxuICBnZXQgaGlkZVNlYXJjaCgpIHtcbiAgICByZXR1cm4gdGhpcy5faGlkZVNlYXJjaDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogTmVzdGEgcHJvcHJpZWRhZGUgZGV2ZSBzZXIgZGVmaW5pZGEgdW1hIGxpc3RhIGRlIG9iamV0b3MgcXVlIHNlcsOhIGV4aWJpZGEgbm8gbXVsdGlzZWxlY3QuXG4gICAqIEVzdGEgbGlzdGEgZGV2ZSBjb250ZXIgb3MgdmFsb3JlcyBlIG9zIGxhYmVscyBxdWUgc2Vyw6NvIGFwcmVzZW50YWRvcyBuYSB0ZWxhLlxuICAgKlxuICAgKiA+IEVzc2EgcHJvcHJpZWRhZGUgw6kgaW11dMOhdmVsLCBvdSBzZWphLCBzZW1wcmUgcXVlIHF1aXNlciBhdHVhbGl6YXIgYSBsaXN0YSBkZSBvcMOnw7VlcyBkaXNwb27DrXZlaXNcbiAgICogYXR1YWxpemUgYSByZWZlcsOqbmNpYSBkbyBvYmpldG86XG4gICAqXG4gICAqIGBgYFxuICAgKiAvLyBhdHVhbGl6YSBhIHJlZmVyw6puY2lhIGRvIG9iamV0byBnYXJhbnRpbmRvIGEgYXR1YWxpemHDp8OjbyBkbyB0ZW1wbGF0ZVxuICAgKiB0aGlzLm9wdGlvbnMgPSBbLi4udGhpcy5vcHRpb25zLCB7IHZhbHVlOiAneCcsIGxhYmVsOiAnTm92YSBvcMOnw6NvJyB9XTtcbiAgICpcbiAgICogLy8gZXZpdGUsIHBvaXMgbsOjbyBhdHVhbGl6YSBhIHJlZmVyw6puY2lhIGRvIG9iamV0byBwb2RlbmRvIGdlcmFyIGF0cmFzb3MgbmEgYXR1YWxpemHDp8OjbyBkbyB0ZW1wbGF0ZVxuICAgKiB0aGlzLm9wdGlvbnMucHVzaCh7IHZhbHVlOiAneCcsIGxhYmVsOiAnTm92YSBvcMOnw6NvJyB9KTtcbiAgICogYGBgXG4gICAqID4gQSBsaXN0YSBwb2RlIHNlciBkZWZpbmlkYSB1dGlsaXphbmRvIHVtIGFycmF5IGNvbSBvIHZhbG9yIHJlcHJlc2VudGFuZG8gYHZhbHVlYCBlIGBsYWJlbGAgZGFzIHNlZ3VpbnRlcyBmb3JtYXM6XG4gICAqXG4gICAqIGBgYFxuICAgKiA8cG8tbXVsdGlzZWxlY3QgbmFtZT1cIm11bHRpc2VsZWN0XCIgcC1sYWJlbD1cIlBPIE11bHRpc2VsZWN0XCIgW3Atb3B0aW9uc109XCJbe3ZhbHVlOiAxLCBsYWJlbDogJ09uZSd9LCB7dmFsdWU6IDIsIGxhYmVsOiAndHdvJ31dXCI+IDwvcG8tbXVsdGlzZWxlY3Q+XG4gICAqIGBgYFxuICAgKlxuICAgKiBgYGBcbiAgICogPHBvLW11bHRpc2VsZWN0IG5hbWU9XCJtdWx0aXNlbGVjdFwiIHAtbGFiZWw9XCJQTyBNdWx0aXNlbGVjdFwiIFtwLW9wdGlvbnNdPVwiW3tuYW1lOiAnUm9nZXInLCBhZ2U6IDI4fSwge25hbWU6ICdBbm5lJywgYWdlOiAzNX1dXCIgcC1maWVsZC1sYWJlbD1cIm5hbWVcIiBwLWZpZWxkLXZhbHVlPVwiYWdlXCI+IDwvcG8tbXVsdGlzZWxlY3Q+XG4gICAqIGBgYFxuICAgKlxuICAgKiAtIEFjb25zZWxoYS1zZSB1dGlsaXphciB2YWxvcmVzIGRpc3RpbnRvcyBubyBgbGFiZWxgIGUgYHZhbHVlYCBkb3MgaXRlbnMuXG4gICAqL1xuICBASW5wdXQoJ3Atb3B0aW9ucycpIHNldCBvcHRpb25zKG9wdGlvbnM6IEFycmF5PFBvTXVsdGlzZWxlY3RPcHRpb24gfCBhbnk+KSB7XG4gICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XG4gIH1cblxuICBnZXQgb3B0aW9ucygpOiBBcnJheTxQb011bHRpc2VsZWN0T3B0aW9uIHwgYW55PiB7XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBJbmRpY2EgcXVlIGEgbGlzdGEgZGVmaW5pZGEgbmEgcHJvcHJpZWRhZGUgcC1vcHRpb25zIHNlcsOhIG9yZGVuYWRhIHBlbG8gbGFiZWwgYW50ZXMgZGUgc2VyIGFwcmVzZW50YWRhIG5vXG4gICAqIGRyb3Bkb3duLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoJ3Atc29ydCcpIHNldCBzb3J0KHNvcnQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9zb3J0ID0gPGFueT5zb3J0ID09PSAnJyA/IHRydWUgOiBjb252ZXJ0VG9Cb29sZWFuKHNvcnQpO1xuXG4gICAgdGhpcy52YWxpZEFuZFNvcnRPcHRpb25zKCk7XG4gIH1cblxuICBnZXQgc29ydCgpIHtcbiAgICByZXR1cm4gdGhpcy5fc29ydDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIERlZmluZSBvIG1vZG8gZGUgcGVzcXVpc2EgdXRpbGl6YWRvIG5vIGNhbXBvIGRlIGJ1c2NhLCBxdWFuZG8gaGFiaWxpdGFkby5cbiAgICogVmFsb3JlcyBkZWZpbmlkb3Mgbm8gZW51bTogUG9NdWx0aXNlbGVjdEZpbHRlck1vZGVcbiAgICpcbiAgICogQGRlZmF1bHQgYHN0YXJ0c1dpdGhgXG4gICAqL1xuICBASW5wdXQoJ3AtZmlsdGVyLW1vZGUnKSBzZXQgZmlsdGVyTW9kZShmaWx0ZXJNb2RlOiBQb011bHRpc2VsZWN0RmlsdGVyTW9kZSkge1xuICAgIHRoaXMuX2ZpbHRlck1vZGUgPSBmaWx0ZXJNb2RlIGluIFBvTXVsdGlzZWxlY3RGaWx0ZXJNb2RlID8gZmlsdGVyTW9kZSA6IFBvTXVsdGlzZWxlY3RGaWx0ZXJNb2RlLnN0YXJ0c1dpdGg7XG4gICAgc3dpdGNoICh0aGlzLl9maWx0ZXJNb2RlLnRvU3RyaW5nKCkpIHtcbiAgICAgIGNhc2UgJ3N0YXJ0c1dpdGgnOlxuICAgICAgICB0aGlzLl9maWx0ZXJNb2RlID0gUG9NdWx0aXNlbGVjdEZpbHRlck1vZGUuc3RhcnRzV2l0aDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdjb250YWlucyc6XG4gICAgICAgIHRoaXMuX2ZpbHRlck1vZGUgPSBQb011bHRpc2VsZWN0RmlsdGVyTW9kZS5jb250YWlucztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdlbmRzV2l0aCc6XG4gICAgICAgIHRoaXMuX2ZpbHRlck1vZGUgPSBQb011bHRpc2VsZWN0RmlsdGVyTW9kZS5lbmRzV2l0aDtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGZpbHRlck1vZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbHRlck1vZGU7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBEZXZlIHNlciBpbmZvcm1hZG8gbyBub21lIGRhIHByb3ByaWVkYWRlIGRvIG9iamV0byBxdWUgc2Vyw6EgdXRpbGl6YWRvIHBhcmEgYSBjb252ZXJzw6NvIGRvcyBpdGVucyBhcHJlc2VudGFkb3MgbmEgbGlzdGEgZG8gY29tcG9uZW50ZVxuICAgKiAoYHAtb3B0aW9uc2ApLCBlc3RhIHByb3ByaWVkYWRlIHNlcsOhIHJlc3BvbnPDoXZlbCBwZWxvIHRleHRvIGRlIGFwcmVzZW50YcOnw6NvIGRlIGNhZGEgaXRlbSBkYSBsaXN0YS5cbiAgICpcbiAgICogTmVjZXNzw6FyaW8gcXVhbmRvIGluZm9ybWFyIG8gc2VydmnDp28gY29tbyBVUkwgZSBvIG1lc21vIG7Do28gZXN0aXZlciByZXRvcm5hbmRvIHVtYSBsaXN0YSBkZSBvYmpldG9zIG5vIHBhZHLDo28gZGEgaW50ZXJmYWNlXG4gICAqIGBQb011bHRpU2VsZWN0T3B0aW9uYC5cbiAgICpcbiAgICogQGRlZmF1bHQgYGxhYmVsYFxuICAgKi9cbiAgQElucHV0KCdwLWZpZWxkLWxhYmVsJykgc2V0IGZpZWxkTGFiZWwodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX2ZpZWxkTGFiZWwgPSB2YWx1ZSA/IHZhbHVlIDogUE9fTVVMVElTRUxFQ1RfRklFTERfTEFCRUxfREVGQVVMVDtcblxuICAgIGlmIChpc1R5cGVvZih0aGlzLmZpbHRlclNlcnZpY2UsICdzdHJpbmcnKSAmJiB0aGlzLnNlcnZpY2UpIHtcbiAgICAgIHRoaXMuc2VydmljZS5maWVsZExhYmVsID0gdGhpcy5fZmllbGRMYWJlbDtcbiAgICB9XG4gIH1cblxuICBnZXQgZmllbGRMYWJlbCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZmllbGRMYWJlbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIERldmUgc2VyIGluZm9ybWFkbyBvIG5vbWUgZGEgcHJvcHJpZWRhZGUgZG8gb2JqZXRvIHF1ZSBzZXLDoSB1dGlsaXphZG8gcGFyYSBhIGNvbnZlcnPDo28gZG9zIGl0ZW5zIGFwcmVzZW50YWRvcyBuYSBsaXN0YSBkbyBjb21wb25lbnRlXG4gICAqIChgcC1vcHRpb25zYCksIGVzdGEgcHJvcHJpZWRhZGUgc2Vyw6EgcmVzcG9uc8OhdmVsIHBlbG8gdmFsb3IgZGUgY2FkYSBpdGVtIGRhIGxpc3RhLlxuICAgKlxuICAgKiBOZWNlc3PDoXJpbyBxdWFuZG8gaW5mb3JtYXIgbyBzZXJ2acOnbyBjb21vIFVSTCBlIG8gbWVzbW8gbsOjbyBlc3RpdmVyIHJldG9ybmFuZG8gdW1hIGxpc3RhIGRlIG9iamV0b3Mgbm8gcGFkcsOjbyBkYSBpbnRlcmZhY2VcbiAgICogYFBvTXVsdGlTZWxlY3RPcHRpb25gLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdmFsdWVgXG4gICAqL1xuICBASW5wdXQoJ3AtZmllbGQtdmFsdWUnKSBzZXQgZmllbGRWYWx1ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fZmllbGRWYWx1ZSA9IHZhbHVlID8gdmFsdWUgOiBQT19NVUxUSVNFTEVDVF9GSUVMRF9WQUxVRV9ERUZBVUxUO1xuXG4gICAgaWYgKGlzVHlwZW9mKHRoaXMuZmlsdGVyU2VydmljZSwgJ3N0cmluZycpICYmIHRoaXMuc2VydmljZSkge1xuICAgICAgdGhpcy5zZXJ2aWNlLmZpZWxkVmFsdWUgPSB0aGlzLl9maWVsZFZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIGdldCBmaWVsZFZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLl9maWVsZFZhbHVlO1xuICB9XG5cbiAgY29uc3RydWN0b3IobGFuZ3VhZ2VTZXJ2aWNlOiBQb0xhbmd1YWdlU2VydmljZSkge1xuICAgIHRoaXMubGFuZ3VhZ2UgPSBsYW5ndWFnZVNlcnZpY2UuZ2V0U2hvcnRMYW5ndWFnZSgpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKHRoaXMuZmlsdGVyU2VydmljZSkge1xuICAgICAgdGhpcy5zZXRTZXJ2aWNlKHRoaXMuZmlsdGVyU2VydmljZSk7XG4gICAgfVxuXG4gICAgdGhpcy5maWx0ZXJTdWJqZWN0XG4gICAgICAucGlwZShcbiAgICAgICAgZGVib3VuY2VUaW1lKHRoaXMuZGVib3VuY2VUaW1lKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgdGFwKCgpID0+ICh0aGlzLmlzU2VydmVyU2VhcmNoaW5nID0gdHJ1ZSkpLFxuICAgICAgICBzd2l0Y2hNYXAoKHNlYXJjaDogc3RyaW5nKSA9PiB0aGlzLmFwcGx5RmlsdGVyKHNlYXJjaCkpLFxuICAgICAgICB0YXAoKCkgPT4gKHRoaXMuaXNTZXJ2ZXJTZWFyY2hpbmcgPSBmYWxzZSkpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICB0aGlzLnNldExhYmVsc0FuZFZhbHVlc09wdGlvbnMoKTtcbiAgICB0aGlzLnZhbGlkQW5kU29ydE9wdGlvbnMoKTtcbiAgICB0aGlzLnVwZGF0ZUxpc3QodGhpcy5vcHRpb25zKTtcbiAgfVxuXG4gIHNldFNlcnZpY2Uoc2VydmljZTogUG9NdWx0aXNlbGVjdEZpbHRlciB8IHN0cmluZykge1xuICAgIGlmIChpc1R5cGVvZihzZXJ2aWNlLCAnb2JqZWN0JykpIHtcbiAgICAgIHRoaXMuc2VydmljZSA9IDxQb011bHRpc2VsZWN0RmlsdGVyU2VydmljZT5zZXJ2aWNlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlcnZpY2UgPSB0aGlzLmRlZmF1bHRTZXJ2aWNlO1xuICAgICAgdGhpcy5zZXJ2aWNlLmNvbmZpZ1Byb3BlcnRpZXMoPHN0cmluZz5zZXJ2aWNlLCB0aGlzLmZpZWxkTGFiZWwsIHRoaXMuZmllbGRWYWx1ZSk7XG4gICAgfVxuXG4gICAgdGhpcy5pc0ZpcnN0RmlsdGVyID0gdHJ1ZTtcbiAgfVxuXG4gIHZhbGlkQW5kU29ydE9wdGlvbnMoKSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICByZW1vdmVVbmRlZmluZWRBbmROdWxsT3B0aW9uc1dpdGhGaWVsZFZhbHVlKHRoaXMub3B0aW9ucywgdGhpcy5maWVsZFZhbHVlKTtcbiAgICAgIHJlbW92ZUR1cGxpY2F0ZWRPcHRpb25zV2l0aEZpZWxkVmFsdWUodGhpcy5vcHRpb25zLCB0aGlzLmZpZWxkVmFsdWUpO1xuICAgICAgdGhpcy5zZXRVbmRlZmluZWRMYWJlbHModGhpcy5vcHRpb25zKTtcblxuICAgICAgaWYgKHRoaXMuc29ydCkge1xuICAgICAgICBzb3J0T3B0aW9uc0J5UHJvcGVydHkodGhpcy5vcHRpb25zLCB0aGlzLmZpZWxkTGFiZWwpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHNldFVuZGVmaW5lZExhYmVscyhvcHRpb25zKSB7XG4gICAgb3B0aW9ucy5mb3JFYWNoKG9wdGlvbiA9PiB7XG4gICAgICBpZiAoIW9wdGlvblt0aGlzLmZpZWxkTGFiZWxdKSB7XG4gICAgICAgIG9wdGlvblt0aGlzLmZpZWxkTGFiZWxdID0gb3B0aW9uW3RoaXMuZmllbGRWYWx1ZV07XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICB1cGRhdGVMaXN0KG9wdGlvbnM6IEFycmF5PFBvTXVsdGlzZWxlY3RPcHRpb24gfCBhbnk+KSB7XG4gICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgIHRoaXMudmlzaWJsZU9wdGlvbnNEcm9wZG93biA9IG9wdGlvbnM7XG4gICAgfVxuICB9XG5cbiAgY2FsbE9uQ2hhbmdlKHNlbGVjdGVkT3B0aW9uczogQXJyYXk8UG9NdWx0aXNlbGVjdE9wdGlvbiB8IGFueT4pIHtcbiAgICBpZiAodGhpcy5vbk1vZGVsQ2hhbmdlKSB7XG4gICAgICB0aGlzLm9uTW9kZWxDaGFuZ2UodGhpcy5nZXRWYWx1ZXNGcm9tT3B0aW9ucyhzZWxlY3RlZE9wdGlvbnMpKTtcbiAgICAgIHRoaXMuZXZlbnRDaGFuZ2Uoc2VsZWN0ZWRPcHRpb25zKTtcbiAgICB9XG4gIH1cblxuICBldmVudENoYW5nZShzZWxlY3RlZE9wdGlvbnMpIHtcbiAgICBpZiAoc2VsZWN0ZWRPcHRpb25zICYmIHRoaXMubGFzdExlbmd0aE1vZGVsICE9PSBzZWxlY3RlZE9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICB0aGlzLmNoYW5nZS5lbWl0KHNlbGVjdGVkT3B0aW9ucyk7XG4gICAgfVxuICAgIHRoaXMubGFzdExlbmd0aE1vZGVsID0gc2VsZWN0ZWRPcHRpb25zID8gc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCA6IG51bGw7XG4gIH1cblxuICBnZXRWYWx1ZXNGcm9tT3B0aW9ucyhzZWxlY3RlZE9wdGlvbnM6IEFycmF5PFBvTXVsdGlzZWxlY3RPcHRpb24gfCBhbnk+KSB7XG4gICAgcmV0dXJuIHNlbGVjdGVkT3B0aW9ucyAmJiBzZWxlY3RlZE9wdGlvbnMubGVuZ3RoID8gc2VsZWN0ZWRPcHRpb25zLm1hcChvcHRpb24gPT4gb3B0aW9uW3RoaXMuZmllbGRWYWx1ZV0pIDogW107XG4gIH1cblxuICBnZXRMYWJlbEJ5VmFsdWUodmFsdWUpIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMub3B0aW9ucy5maW5kSW5kZXgob3B0aW9uID0+IG9wdGlvblt0aGlzLmZpZWxkVmFsdWVdID09PSB2YWx1ZSk7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9uc1tpbmRleF0ubGFiZWw7XG4gIH1cblxuICBzZWFyY2hCeUxhYmVsKHNlYXJjaDogc3RyaW5nLCBvcHRpb25zOiBBcnJheTxQb011bHRpc2VsZWN0T3B0aW9uIHwgYW55PiwgZmlsdGVyTW9kZTogUG9NdWx0aXNlbGVjdEZpbHRlck1vZGUpIHtcbiAgICBpZiAoc2VhcmNoICYmIG9wdGlvbnMgJiYgb3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IG5ld09wdGlvbnM6IEFycmF5PFBvTXVsdGlzZWxlY3RPcHRpb24gfCBhbnk+ID0gW107XG4gICAgICBvcHRpb25zLmZvckVhY2gob3B0aW9uID0+IHtcbiAgICAgICAgaWYgKG9wdGlvblt0aGlzLmZpZWxkTGFiZWxdICYmIHRoaXMuY29tcGFyZU1ldGhvZChzZWFyY2gsIG9wdGlvbiwgZmlsdGVyTW9kZSkpIHtcbiAgICAgICAgICBuZXdPcHRpb25zLnB1c2gob3B0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB0aGlzLnZpc2libGVPcHRpb25zRHJvcGRvd24gPSBuZXdPcHRpb25zO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnZpc2libGVPcHRpb25zRHJvcGRvd24gPSBbLi4ub3B0aW9uc107XG4gICAgfVxuICB9XG5cbiAgY29tcGFyZU1ldGhvZChzZWFyY2g6IHN0cmluZywgb3B0aW9uOiBQb011bHRpc2VsZWN0T3B0aW9uLCBmaWx0ZXJNb2RlOiBQb011bHRpc2VsZWN0RmlsdGVyTW9kZSkge1xuICAgIHN3aXRjaCAoZmlsdGVyTW9kZSkge1xuICAgICAgY2FzZSBQb011bHRpc2VsZWN0RmlsdGVyTW9kZS5zdGFydHNXaXRoOlxuICAgICAgICByZXR1cm4gdGhpcy5zdGFydHNXaXRoKHNlYXJjaCwgb3B0aW9uKTtcbiAgICAgIGNhc2UgUG9NdWx0aXNlbGVjdEZpbHRlck1vZGUuY29udGFpbnM6XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5zKHNlYXJjaCwgb3B0aW9uKTtcbiAgICAgIGNhc2UgUG9NdWx0aXNlbGVjdEZpbHRlck1vZGUuZW5kc1dpdGg6XG4gICAgICAgIHJldHVybiB0aGlzLmVuZHNXaXRoKHNlYXJjaCwgb3B0aW9uKTtcbiAgICB9XG4gIH1cblxuICBzdGFydHNXaXRoKHNlYXJjaDogc3RyaW5nLCBvcHRpb246IFBvTXVsdGlzZWxlY3RPcHRpb24pIHtcbiAgICByZXR1cm4gb3B0aW9uW3RoaXMuZmllbGRMYWJlbF0udG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKHNlYXJjaC50b0xvd2VyQ2FzZSgpKTtcbiAgfVxuXG4gIGNvbnRhaW5zKHNlYXJjaDogc3RyaW5nLCBvcHRpb246IFBvTXVsdGlzZWxlY3RPcHRpb24pIHtcbiAgICByZXR1cm4gb3B0aW9uW3RoaXMuZmllbGRMYWJlbF0udG9Mb3dlckNhc2UoKS5pbmRleE9mKHNlYXJjaC50b0xvd2VyQ2FzZSgpKSA+IC0xO1xuICB9XG5cbiAgZW5kc1dpdGgoc2VhcmNoOiBzdHJpbmcsIG9wdGlvbjogUG9NdWx0aXNlbGVjdE9wdGlvbikge1xuICAgIHJldHVybiBvcHRpb25bdGhpcy5maWVsZExhYmVsXS50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKHNlYXJjaC50b0xvd2VyQ2FzZSgpKTtcbiAgfVxuXG4gIHZhbGlkYXRlKGM6IEFic3RyYWN0Q29udHJvbCk6IHsgW2tleTogc3RyaW5nXTogYW55IH0ge1xuICAgIGlmIChyZXF1aXJlZEZhaWxlZCh0aGlzLnJlcXVpcmVkLCB0aGlzLmRpc2FibGVkLCBjLnZhbHVlKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVxdWlyZWQ6IHtcbiAgICAgICAgICB2YWxpZDogZmFsc2VcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHVwZGF0ZVNlbGVjdGVkT3B0aW9ucyhuZXdPcHRpb25zOiBBcnJheTxhbnk+LCBvcHRpb25zID0gdGhpcy5vcHRpb25zKSB7XG4gICAgdGhpcy5zZWxlY3RlZE9wdGlvbnMgPSBbXTtcblxuICAgIGlmIChuZXdPcHRpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5sYXN0TGVuZ3RoTW9kZWwgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZmlsdGVyU2VydmljZSkge1xuICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbnMgPSBuZXdPcHRpb25zO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdPcHRpb25zLmZvckVhY2gobmV3T3B0aW9uID0+IHtcbiAgICAgICAgb3B0aW9ucy5mb3JFYWNoKG9wdGlvbiA9PiB7XG4gICAgICAgICAgaWYgKG9wdGlvblt0aGlzLmZpZWxkVmFsdWVdID09PSBuZXdPcHRpb25bdGhpcy5maWVsZFZhbHVlXSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbnMucHVzaChvcHRpb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZVZpc2libGVJdGVtcygpO1xuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZXM6IGFueSk6IHZvaWQge1xuICAgIHZhbHVlcyA9IHZhbHVlcyB8fCBbXTtcblxuICAgIGlmICh0aGlzLnNlcnZpY2UgJiYgdmFsdWVzLmxlbmd0aCkge1xuICAgICAgdGhpcy5nZXRPYmplY3RzQnlWYWx1ZXNTdWJzY3JpcHRpb24gPSB0aGlzLnNlcnZpY2UuZ2V0T2JqZWN0c0J5VmFsdWVzKHZhbHVlcykuc3Vic2NyaWJlKG9wdGlvbnMgPT4ge1xuICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkT3B0aW9ucyhvcHRpb25zKTtcbiAgICAgICAgdGhpcy5jYWxsT25DaGFuZ2UodGhpcy5zZWxlY3RlZE9wdGlvbnMpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFZhbGlkYXIgc2UgdG9kb3Mgb3MgaXRlbXMgZXhpc3RlbSBlbnRyZSBvcyBvcHRpb25zLCBzZW7Do28gYXR1YWxpemFyIG8gbW9kZWxcbiAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRPcHRpb25zKHZhbHVlcy5tYXAodmFsdWUgPT4gKHsgW3RoaXMuZmllbGRWYWx1ZV06IHZhbHVlIH0pKSk7XG5cbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkT3B0aW9ucyAmJiB0aGlzLnNlbGVjdGVkT3B0aW9ucy5sZW5ndGggPCB2YWx1ZXMubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuY2FsbE9uQ2hhbmdlKHRoaXMuc2VsZWN0ZWRPcHRpb25zKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBGdW7Dp8OjbyBpbXBsZW1lbnRhZGEgZG8gQ29udHJvbFZhbHVlQWNjZXNzb3JcbiAgLy8gVXNhZGEgcGFyYSBpbnRlcmNlcHRhciBvcyBlc3RhZG9zIGRlIGhhYmlsaXRhZG8gdmlhIGZvcm1zIGFwaVxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25Nb2RlbENoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25Nb2RlbFRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2UoZm46ICgpID0+IHZvaWQpIHtcbiAgICB0aGlzLnZhbGlkYXRvckNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRMYWJlbHNBbmRWYWx1ZXNPcHRpb25zKCkge1xuICAgIGlmICh0aGlzLmZpZWxkTGFiZWwgJiYgdGhpcy5maWVsZFZhbHVlICYmIHRoaXMub3B0aW9ucykge1xuICAgICAgdGhpcy5vcHRpb25zLm1hcChvcHRpb24gPT4ge1xuICAgICAgICBvcHRpb24ubGFiZWwgPSBvcHRpb25bdGhpcy5maWVsZExhYmVsXTtcbiAgICAgICAgb3B0aW9uLnZhbHVlID0gb3B0aW9uW3RoaXMuZmllbGRWYWx1ZV07XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHZhbGlkYXRlTW9kZWwoKSB7XG4gICAgaWYgKHRoaXMudmFsaWRhdG9yQ2hhbmdlKSB7XG4gICAgICB0aGlzLnZhbGlkYXRvckNoYW5nZSgpO1xuICAgIH1cbiAgfVxuXG4gIGFic3RyYWN0IGFwcGx5RmlsdGVyKHZhbHVlPzogc3RyaW5nKTogT2JzZXJ2YWJsZTxBcnJheTxQb011bHRpc2VsZWN0T3B0aW9uIHwgYW55Pj47XG4gIGFic3RyYWN0IHVwZGF0ZVZpc2libGVJdGVtcygpOiB2b2lkO1xufVxuIl19
|
|
784
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tbXVsdGlzZWxlY3QtYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2NvbXBvbmVudHMvcG8tZmllbGQvcG8tbXVsdGlzZWxlY3QvcG8tbXVsdGlzZWxlY3QtYmFzZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUcvRSxPQUFPLEVBQWMsT0FBTyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUN6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVwRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFFckYsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixRQUFRLEVBQ1IscUNBQXFDLEVBQ3JDLDJDQUEyQyxFQUMzQyxxQkFBcUIsRUFDdEIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFakQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sbUNBQW1DLENBQUM7OztBQU01RSxNQUFNLG9DQUFvQyxHQUFHLEdBQUcsQ0FBQztBQUNqRCxNQUFNLGtDQUFrQyxHQUFHLE9BQU8sQ0FBQztBQUNuRCxNQUFNLGtDQUFrQyxHQUFHLE9BQU8sQ0FBQztBQUVuRCxNQUFNLENBQUMsTUFBTSw0QkFBNEIsR0FBRztJQUMxQyxFQUFFLEVBQXlCO1FBQ3pCLE1BQU0sRUFBRSxlQUFlO1FBQ3ZCLGlCQUFpQixFQUFFLFFBQVE7UUFDM0IsU0FBUyxFQUFFLFlBQVk7UUFDdkIsVUFBVSxFQUFFLGNBQWM7S0FDM0I7SUFDRCxFQUFFLEVBQXlCO1FBQ3pCLE1BQU0s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UyxFQUFFLGdCQUFnQixFQUFFO1lBWWxDLGlCQUFpQjtrQkFBaEQsS0FBSzttQkFBQyx1QkFBdUI7WUFjTixVQUFVO2tCQUFqQyxLQUFLO21CQUFDLGVBQWU7WUFTRixNQUFNO2tCQUF6QixNQUFNO21CQUFDLFVBQVU7WUFjaUQsU0FBUztrQkFBM0UsS0FBSzttQkFBQyxFQUFFLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7WUFFUSxjQUFjO2tCQUF0RixLQUFLO21CQUFDLEVBQUUsS0FBSyxFQUFFLHdCQUF3QixFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtZQWdFeEMsYUFBYTtrQkFBM0MsS0FBSzttQkFBQyxrQkFBa0I7WUF3QjJDLFVBQVU7a0JBQTdFLEtBQUs7bUJBQUMsRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtZQW1CaEMsWUFBWTtrQkFBekMsS0FBSzttQkFBQyxpQkFBaUI7WUErQ0MsUUFBUTtrQkFBaEMsS0FBSzttQkFBQyxZQUFZO1lBMkJNLFFBQVE7a0JBQWhDLEtBQUs7bUJBQUMsWUFBWTtZQWVPLFlBQVk7a0JBQXJDLEtBQUs7bUJBQUMsaUJBQWlCO1lBV0MsUUFBUTtrQkFBaEMsS0FBSzttQkFBQyxZQUFZO1lBb0JTLFVBQVU7a0JBQXJDLEtBQUs7bUJBQUMsZUFBZTtZQW9DRSxPQUFPO2tCQUE5QixLQUFLO21CQUFDLFdBQVc7WUFrQkcsSUFBSTtrQkFBeEIsS0FBSzttQkFBQyxRQUFRO1lBb0JhLFVBQVU7a0JBQXJDLEtBQUs7bUJBQUMsZUFBZTtZQStCTSxVQUFVO2tCQUFyQyxLQUFLO21CQUFDLGVBQWU7WUF3Qk0sVUFBVTtrQkFBckMsS0FBSzttQkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBDb250cm9sVmFsdWVBY2Nlc3NvciwgVmFsaWRhdG9yLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBwb0xvY2FsZURlZmF1bHQgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9wby1sYW5ndWFnZS9wby1sYW5ndWFnZS5jb25zdGFudCc7XG5pbXBvcnQgeyBQb0xhbmd1YWdlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3BvLWxhbmd1YWdlL3BvLWxhbmd1YWdlLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgY29udmVydFRvQm9vbGVhbixcbiAgaXNUeXBlb2YsXG4gIHJlbW92ZUR1cGxpY2F0ZWRPcHRpb25zV2l0aEZpZWxkVmFsdWUsXG4gIHJlbW92ZVVuZGVmaW5lZEFuZE51bGxPcHRpb25zV2l0aEZpZWxkVmFsdWUsXG4gIHNvcnRPcHRpb25zQnlQcm9wZXJ0eVxufSBmcm9tICcuLi8uLi8uLi91dGlscy91dGlsJztcbmltcG9ydCB7IHJlcXVpcmVkRmFpbGVkIH0gZnJvbSAnLi8uLi92YWxpZGF0b3JzJztcblxuaW1wb3J0IHsgUG9NdWx0aXNlbGVjdEZpbHRlck1vZGUgfSBmcm9tICcuL3BvLW11bHRpc2VsZWN0LWZpbHRlci1tb2RlLmVudW0nO1xuaW1wb3J0IHsgUG9NdWx0aXNlbGVjdEZpbHRlciB9IGZyb20gJy4vcG8tbXVsdGlzZWxlY3QtZmlsdGVyLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQb011bHRpc2VsZWN0RmlsdGVyU2VydmljZSB9IGZyb20gJy4vcG8tbXVsdGlzZWxlY3QtZmlsdGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgUG9NdWx0aXNlbGVjdExpdGVyYWxzIH0gZnJvbSAnLi9wby1tdWx0aXNlbGVjdC1saXRlcmFscy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9NdWx0aXNlbGVjdE9wdGlvbiB9IGZyb20gJy4vcG8tbXVsdGlzZWxlY3Qtb3B0aW9uLmludGVyZmFjZSc7XG5cbmNvbnN0IFBPX01VTFRJU0VMRUNUX0RFQk9VTkNFX1RJTUVfREVGQVVMVCA9IDQwMDtcbmNvbnN0IFBPX01VTFRJU0VMRUNUX0ZJRUxEX0xBQkVMX0RFRkFVTFQgPSAnbGFiZWwnO1xuY29uc3QgUE9fTVVMVElTRUxFQ1RfRklFTERfVkFMVUVfREVGQVVMVCA9ICd2YWx1ZSc7XG5cbmV4cG9ydCBjb25zdCBwb011bHRpc2VsZWN0TGl0ZXJhbHNEZWZhdWx0ID0ge1xuICBlbjogPFBvTXVsdGlzZWxlY3RMaXRlcmFscz57XG4gICAgbm9EYXRhOiAnTm8gZGF0YSBmb3VuZCcsXG4gICAgcGxhY2Vob2xkZXJTZWFyY2g6ICdTZWFyY2gnLFxuICAgIHNlbGVjdEFsbDogJ1NlbGVjdCBhbGwnLFxuICAgIHNlbGVjdEl0ZW06ICdTZWxlY3QgaXRlbXMnXG4gIH0sXG4gIGVzOiA8UG9NdWx0aXNlbGVjdExpdGVyYWxzPntcbiAgICBub0RhdGE6ICdEYXRvcyBubyBlbmNvbnRyYWRvcycsXG4gICAgcGxhY2Vob2xkZXJTZWFyY2g6ICdCdXNjYScsXG4gICAgc2VsZWN0QWxsOiAnU2VsZWNjaW9uYXIgdG9kbycsXG4gICAgc2VsZWN0SXRlbTogJ1NlbGVjY2lvbmFyIGl0ZW1zJ1xuICB9LFxuICBwdDogPFBvTXVsdGlzZWxlY3RMaXRlcmFscz57XG4gICAgbm9EYXRhOiAnTmVuaHVtIGRhZG8gZW5jb250cmFkbycsXG4gICAgcGxhY2Vob2xkZXJTZWFyY2g6ICdCdXNjYXInLFxuICAgIHNlbGVjdEFsbDogJ1NlbGVjaW9uYXIgdG9kb3MnLFxuICAgIHNlbGVjdEl0ZW06ICdTZWxlY2lvbmFyIGl0ZW5zJ1xuICB9LFxuICBydTogPFBvTXVsdGlzZWxlY3RMaXRlcmFscz57XG4gICAgbm9EYXRhOiAn0JTQsNC90L3Ri9C1INC90LUg0L3QsNC50LTQtdC90YsnLFxuICAgIHBsYWNlaG9sZGVyU2VhcmNoOiAn0LjRgdC60LDRgtGMJyxcbiAgICBzZWxlY3RBbGw6ICfQktGL0LHRgNCw0YLRjCDQstGB0LUnLFxuICAgIHNlbGVjdEl0ZW06ICfQktGL0LHRgNCw0YLRjCDRjdC70LXQvNC10L3RgtGLJ1xuICB9XG59O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvblxuICpcbiAqIE8gcG8tbXVsdGlzZWxlY3Qgw6kgdW0gY29tcG9uZW50ZSBkZSBtw7psdGlwbGEgc2VsZcOnw6NvLlxuICogRXN0ZSBjb21wb25lbnRlIMOpIHJlY29tZW5kYWRvIHBhcmEgZGFyIGFvIHVzdcOhcmlvIGEgb3DDp8OjbyBkZSBzZWxlY2lvbmFyIHbDoXJpb3MgaXRlbnMgZW0gdW1hIGxpc3RhLlxuICpcbiAqIFF1YW5kbyBhIGxpc3RhIHBvc3N1aXIgcG91Y29zIGl0ZW5zLCBkZXZlLXNlIGRhciBwcmVmZXLDqm5jaWEgcGFyYSBvIHVzbyBkbyBwby1jaGVja2JveC1ncm91cCwgcG9yIHNlciBtYWlzIHNpbXBsZXNcbiAqIGUgbWFpcyByw6FwaWRvIHBhcmEgYSBzZWxlw6fDo28gZG8gdXN1w6FyaW8uXG4gKlxuICogRXN0ZSBjb21wb25lbnRlIHRhbWLDqW0gbsOjbyBkZXZlIHNlciB1dGlsaXphZG8gZW0gY2Fzb3Mgb25kZSBhIHNlbGXDp8OjbyBzZWphIMO6bmljYS4gTmVzc2VzIGNhc29zLCBkZXZlLXNlIHV0aWxpemFyIG9cbiAqIHBvLXNlbGVjdCwgcG8tY29tYm8gb3UgcG8tcmFkaW8tZ3JvdXAuXG4gKlxuICogQ29tIGVsZSB0YW1iw6ltIMOpIHBvc3PDrXZlbCBkZWZpbmlyIHVtYSBsaXN0YSDDoCBwYXJ0aXIgZGEgcmVxdWlzacOnw6NvIGRlIHVtIHNlcnZpw6dvIGRlZmluaWRvIGVtIGBwLWZpbHRlci1zZXJ2aWNlYC5cbiAqXG4gKiAjIyMjIEJvYXMgcHLDoXRpY2FzXG4gKlxuICogLSBDYXNvIGEgbGlzdGEgYXByZXNlbnRlIG1lbm9zIGRlIDUgaXRlbnMsIGNvbnNpZGVyZSB1dGlsaXphciBvdXRybyBjb21wb25lbnRlO1xuICogLSBOw6NvIHV0aWxpemUgbyBtdWx0aXNlbGVjdCBjYXNvIG8gdXN1w6FyaW8gcG9zc2Egc2VsZWNpb25hciBhcGVuYXMgdW1hIG9ww6fDo28uIFBhcmEgZXNzZSBjYXNvLCBvcHRlIHBvciB1dGlsaXphciBwby1yYWRpbyBvdSBwby1zZWxlY3Q7XG4gKiAtIFNlbXByZSBxdWUgcG9zc8OtdmVsLCBhZ3J1cGUgYXMgb3DDp8O1ZXMgZSB1c2UgbGFiZWxzIGN1cnRhcyBwYXJhIGRlc2NyZXZlciBvIGNvbnRlw7pkby4gRXhlbXBsbzogZW0gdW1hIGNvbWJpbmHDp8OjbyBkZSBhbGltZW50b3MsXG4gKiBhcyBvcMOnw7VlcyBwb2RlbSBzZXIgYWdydXBhZGFzIHBvciBWZWdldGFpcywgRnJ1dGFzLCBldGM7XG4gKlxuICogIyMjIyBBY2Vzc2liaWxpZGFkZSB0cmF0YWRhIG5vIGNvbXBvbmVudGVcbiAqXG4gKiBBbGd1bWFzIGRpcmV0cml6ZXMgZGUgYWNlc3NpYmlsaWRhZGUgasOhIHPDo28gdHJhdGFkYXMgbm8gY29tcG9uZW50ZSBpbnRlcm5hbWVudGUsIGUgbsOjbyBwb2RlbSBzZXIgYWx0ZXJhZGFzIHBlbG8gcHJvcHJpZXTDoXJpbyBkbyBjb250ZcO6ZG8uIFPDo28gZWxhczpcbiAqXG4gKiAtIFF1YW5kbyBlbSBmb2NvLCBvIG11bHRpc2VsZWN0IGFicmUgbyBsaXN0Ym94IHVzYW5kbyBhcyB0ZWNsYXMgZGUgRXNwYcOnbyBvdSBFbnRlciBkbyB0ZWNsYWRvLlxuICogLSBVdGlsaXplIGFzIHRlY2xhcyBBcnJvdyBVcCBbc2V0YSBwYXJhIGNpbWFdIG91IEFycm93IERvd24gW3NldGEgcGFyYSBiYWl4b10gZG8gdGVjbGFkbyBwYXJhIG5hdmVnYXIgZW50cmUgb3MgaXRlbnMgZG8gbGlzdGJveC5cbiAqIC0gVXRpbGl6ZSBhIHRlY2xhIEVzYyBkbyB0ZWNsYWRvIHBhcmEgZmVjaGFyIG8gbGlzdGJveC5cbiAqIC0gUXVhbmRvIHVtIGl0ZW0gZXN0aXZlciBlbSBmb2NvLCB1dGlsaXplIGFzIHRlY2xhcyBBcnJvdyBSaWdodCBbc2V0YSBwYXJhIGRpcmVpdGFdIG91IEFycm93IExlZnQgW3NldGEgcGFyYSBlc3F1ZXJkYV0gZG8gdGVjbGFkbyBwYXJhIG5hdmVnYXIgZW50cmUgZWxlcy5cbiAqIC0gUXVhbmRvIGVtIGZvY28gZSBoYXZlbmRvIHVtIGl0ZW0gb3UgbWFpcyBqw6Egc2VsZWNpb25hZG8sIHV0aWxpemUgYSB0ZWNsYSBBcnJvdyBEb3duIFtzZXRhIHBhcmEgYmFpeG9dIGRvIHRlY2xhZG8gcGFyYSBhYnJpciBvIGxpc3Rib3guXG4gKlxuICogIyMjIyBUb2tlbnMgY3VzdG9taXrDoXZlaXNcbiAqXG4gKiDDiSBwb3Nzw612ZWwgYWx0ZXJhciBvIGVzdGlsbyBkbyBjb21wb25lbnRlIHVzYW5kbyBvcyBzZWd1aW50ZXMgdG9rZW5zIChDU1MpOlxuICpcbiAqID4gUGFyYSBtYWlvcmVzIGluZm9ybWHDp8O1ZXMsIGFjZXNzZSBvIGd1aWEgW1BlcnNvbmFsaXphbmRvIG8gVGVtYSBQYWRyw6NvIGNvbSBUb2tlbnMgQ1NTXShodHRwczovL3BvLXVpLmlvL2d1aWRlcy90aGVtZS1jdXN0b21pemF0aW9uKS5cbiAqXG4gKiB8IFByb3ByaWVkYWRlICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRGVzY3Jpw6fDo28gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFZhbG9yIFBhZHLDo28gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxuICogfCAqKkRlZmF1bHQgVmFsdWVzKiogICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8IGAtLWZvbnQtZmFtaWx5YCAgICAgICAgICAgICAgICAgICAgICAgIHwgRmFtw61saWEgdGlwb2dyw6FmaWNhIHVzYWRhICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGB2YXIoLS1mb250LWZhbWlseS10aGVtZSlgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCBgLS1mb250LXNpemVgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFRhbWFuaG8gZGEgZm9udGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYHZhcigtLWZvbnQtc2l6ZS1kZWZhdWx0KWAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8IGAtLXRleHQtY29sb3ItcGxhY2Vob2xkZXJgICZuYnNwOyAgICAgIHwgQ29yIGRvIHRleHRvIGRvIHBsYWNlaG9sZGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBgdmFyKC0tY29sb3ItYWN0aW9uLWRpc2FibGVkKWAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgYC0tY29sb3JgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDb3IgcHJpbmNpcGFsIGRvIG11bHRpc2VsZWN0ICAgICAgICAgICAgICAgICAgICAgICAgICB8IGB2YXIoLS1jb2xvci1uZXV0cmFsLWRhcmstNzApYCAgICAgICAgICAgICAgICAgICAgfFxuICogfCBgLS1iYWNrZ3JvdW5kYCAgICAgICAgICAgICAgICAgICAgICAgICB8IENvciBkZSBiYWNrZ3JvdW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYHZhcigtLWNvbG9yLW5ldXRyYWwtbGlnaHQtMDUpYCAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICoqSG92ZXIqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgYC0tY29sb3ItaG92ZXJgICAgICAgICAgICAgICAgICAgICAgICAgfCBDb3IgcHJpbmNpcGFsIG5vIGVzdGFkbyBob3ZlciAgICAgICAgICAgICAgICAgICAgICAgICB8IGB2YXIoLS1jb2xvci1hY3Rpb24taG92ZXIpYCAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCBgLS1iYWNrZ3JvdW5kLWhvdmVyYCAgICAgICAgICAgICAgICAgICB8IENvciBkZSBiYWNrZ3JvdW5kIG5vIGVzdGFkbyBob3ZlciAgICAgICAgICAgICAgICAgICAgIHwgYHZhcigtLWNvbG9yLWJyYW5kLTAxLWxpZ2h0ZXIpYCAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICoqRm9jdXNlZCoqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgYC0tY29sb3ItZm9jdXNlZGAgICAgICAgICAgICAgICAgICAgICAgfCBDb3IgcHJpbmNpcGFsIG5vIGVzdGFkbyBkZSBmb2N1cyAgICAgICAgICAgICAgICAgICAgICB8IGB2YXIoLS1jb2xvci1hY3Rpb24tZGVmYXVsdClgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCBgLS1vdXRsaW5lLWNvbG9yLWZvY3VzZWRgICZuYnNwOyAgICAgICB8IENvciBkbyBvdXRsaW5lIGRvIGVzdGFkbyBkZSBmb2N1cyAgICAgICAgICAgICAgICAgICAgIHwgYHZhcigtLWNvbG9yLWFjdGlvbi1mb2N1cylgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICoqRGlzYWJsZWQqKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgYC0tY29sb3ItZGlzYWJsZWRgICAgICAgICAgICAgICAgICAgICAgfCBDb3IgcHJpbmNpcGFsIG5vIGVzdGFkbyBkaXNhYmxlZCAgICAgICAgICAgICAgICAgICAgICB8IGB2YXIoLS1jb2xvci1hY3Rpb24tZGlzYWJsZWQpYCAgICAgICAgICAgICAgICAgICAgfFxuICogfCBgLS1iYWNrZ3JvdW5kLWRpc2FibGVkYCAmbmJzcDsgICAgICAgICB8IENvciBkZSBiYWNrZ3JvdW5kIG5vIGVzdGFkbyBkaXNhYmxlZCAmbmJzcDsgICAgICAgICAgIHwgYHZhcigtLWNvbG9yLW5ldXRyYWwtbGlnaHQtMjApYCAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICoqRXJyb3IqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgYC0tY29sb3ItZXJyb3JgICAgICAgICAgICAgICAgICAgICAgICAgfCBDb3IgcHJpbmNpcGFsIG5vIGVzdGFkbyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICB8IGB2YXIoLS1jb2xvci1mZWVkYmFjay1uZWdhdGl2ZS1iYXNlKWAgICAgICAgICAgICAgfFxuICpcbiAqL1xuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUG9NdWx0aXNlbGVjdEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25Jbml0LCBWYWxpZGF0b3Ige1xuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBBcGxpY2EgZm9jbyBubyBlbGVtZW50byBhbyBzZXIgaW5pY2lhZG8uXG4gICAqXG4gICAqID4gQ2FzbyBtYWlzIGRlIHVtIGVsZW1lbnRvIHNlamEgY29uZmlndXJhZG8gY29tIGVzc2EgcHJvcHJpZWRhZGUsIGFwZW5hcyBvIMO6bHRpbW8gZWxlbWVudG8gZGVjbGFyYWRvIGNvbSBlbGEgdGVyw6EgbyBmb2NvLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoeyBhbGlhczogJ3AtYXV0by1mb2N1cycsIHRyYW5zZm9ybTogY29udmVydFRvQm9vbGVhbiB9KSBhdXRvRm9jdXM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogTGFiZWwgbm8gY29tcG9uZW50ZS4gKi9cbiAgQElucHV0KCdwLWxhYmVsJykgbGFiZWw/OiBzdHJpbmc7XG5cbiAgLyoqIFRleHRvIGRlIGFwb2lvIHBhcmEgbyBjYW1wby4gKi9cbiAgQElucHV0KCdwLWhlbHAnKSBoZWxwPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIERlZmluZSBzZSBhIGluZGljYcOnw6NvIGRlIGNhbXBvIG9wY2lvbmFsIHNlcsOhIGV4aWJpZGEuXG4gICAqXG4gICAqID4gTsOjbyBzZXLDoSBleGliaWRhIGEgaW5kaWNhw6fDo28gc2U6XG4gICAqIC0gTyBjYW1wbyBjb250ZXIgYHAtcmVxdWlyZWRgO1xuICAgKiAtIE7Do28gcG9zc3VpciBgcC1oZWxwYCBlL291IGBwLWxhYmVsYC5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KCdwLW9wdGlvbmFsJykgb3B0aW9uYWw6IGJvb2xlYW47XG5cbiAgLyoqIE1lbnNhZ2VtIGFwcmVzZW50YWRhIGVucXVhbnRvIG8gY2FtcG8gZXN0aXZlciB2YXppby4gKi9cbiAgQElucHV0KCdwLXBsYWNlaG9sZGVyJykgcGxhY2Vob2xkZXI/OiBzdHJpbmcgPSAnJztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIFBsYWNlaG9sZGVyIGRvIGNhbXBvIGRlIHBlc3F1aXNhLlxuICAgKlxuICAgKiA+IENhc28gbyBtZXNtbyBuw6NvIHNlamEgaW5mb3JtYWRvLCBvIHZhbG9yIHBhZHLDo28gc2Vyw6EgdHJhZHV6aWRvIGNvbSBiYXNlIG5vIGlkaW9tYSBkbyBuYXZlZ2Fkb3IgKHB0LCBlcyBlIGVuKS5cbiAgICpcbiAgICogQGRlZmF1bHQgYEJ1c2NhcmBcbiAgICovXG4gIEBJbnB1dCgncC1wbGFjZWhvbGRlci1zZWFyY2gnKSBwbGFjZWhvbGRlclNlYXJjaD86IHN0cmluZyA9ICcnO1xuXG4gIC8qKiBOb21lIGRvIGNvbXBvbmVudGUuICovXG4gIEBJbnB1dCgnbmFtZScpIG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBJbmRpY2Egc2UgbyBjYW1wbyBcIlNlbGVjaW9uYXIgdG9kb3NcIiBzZXLDoSBlc2NvbmRpZG8uXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dCh7IGFsaWFzOiAncC1oaWRlLXNlbGVjdC1hbGwnLCB0cmFuc2Zvcm06IGNvbnZlcnRUb0Jvb2xlYW4gfSkgaGlkZVNlbGVjdEFsbD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRXhpYmUgYSBtZW5zYWdlbSBzZXRhZGEgc2UgbyBjYW1wbyBlc3RpdmVyIHZhemlvIGUgZm9yIHJlcXVlcmlkby5cbiAgICpcbiAgICogPiBOZWNlc3PDoXJpbyBxdWUgYSBwcm9wcmllZGFkZSBgcC1yZXF1aXJlZGAgZXN0ZWphIGhhYmlsaXRhZGEuXG4gICAqXG4gICAqL1xuICBASW5wdXQoJ3AtZmllbGQtZXJyb3ItbWVzc2FnZScpIGZpZWxkRXJyb3JNZXNzYWdlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogTGltaXRhIGEgZXhpYmnDp8OjbyBkYSBtZW5zYWdlbSBkZSBlcnJvIGEgZHVhcyBsaW5oYXMgZSBleGliZSB1bSB0b29sdGlwIGNvbSBvIHRleHRvIGNvbXBsZXRvLlxuICAgKlxuICAgKiA+IENhc28gZXNzYSBwcm9wcmllZGFkZSBzZWphIGRlZmluaWRhIGNvbW8gYHRydWVgLCBhIG1lbnNhZ2VtIGRlIGVycm8gc2Vyw6EgbGltaXRhZGEgYSBkdWFzIGxpbmhhc1xuICAgKiBlIHVtIHRvb2x0aXAgc2Vyw6EgZXhpYmlkbyBhbyBwYXNzYXIgbyBtb3VzZSBzb2JyZSBhIG1lbnNhZ2VtIHBhcmEgbW9zdHJhciBvIGNvbnRlw7pkbyBjb21wbGV0by5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KCdwLWVycm9yLWxpbWl0JykgZXJyb3JMaW1pdDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIFBvZGUgc2VyIGluZm9ybWFkYSB1bWEgZnVuw6fDo28gcXVlIHNlcsOhIGRpc3BhcmFkYSBxdWFuZG8gaG91dmVyIGFsdGVyYcOnw7VlcyBubyBuZ01vZGVsLlxuICAgKi9cbiAgQE91dHB1dCgncC1jaGFuZ2UnKSBjaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRGVmaW5lIHF1ZSBvIGRyb3Bkb3duIGRvIG11bHRpc2VsZWN0IHNlcsOhIGluY2x1aWRvIG5vIGJvZHkgZGEgcMOhZ2luYSBlIG7Do28gc3VzcGVuc28gY29tIGEgY2FpeGEgZGUgdGV4dG8gZG8gY29tcG9uZW50ZS5cbiAgICogT3DDp8OjbyBuZWNlc3PDoXJpYSBwYXJhIG8gY2FzbyBkZSB1c28gZG8gY29tcG9uZW50ZSBlbSBww6FnaW5hcyBxdWUgbmVjZXNzaXRhbSByZW5kZXJpemFyIG8gbXVsdGlzZWxlY3QgZm9yYSBkbyBjb250ZcO6ZG8gcHJpbmNpcGFsLlxuICAgKlxuICAgKiA+IE9iczogTyB1c28gZGVzc2EgcHJvcHJpZWRhZGUgcG9kZSBhY2FycmV0YXIgbmEgcGVyZGEgc2VxdWVuY2lhbCBkYSB0YWJ1bGHDp8OjbyBkYSBww6FnaW5hXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dCh7IGFsaWFzOiAncC1hcHBlbmQtaW4tYm9keScsIHRyYW5zZm9ybTogY29udmVydFRvQm9vbGVhbiB9KSBhcHBlbmRCb3g/OiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KHsgYWxpYXM6ICdwLWVycm9yLWFwcGVuZC1pbi1ib2R5JywgdHJhbnNmb3JtOiBjb252ZXJ0VG9Cb29sZWFuIH0pIGVycm9yQXBwZW5kQm94PzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHNlbGVjdGVkT3B0aW9uczogQXJyYXk8UG9NdWx0aXNlbGVjdE9wdGlvbiB8IGFueT4gPSBbXTtcbiAgdmlzaWJsZU9wdGlvbnNEcm9wZG93bjogQXJyYXk8UG9NdWx0aXNlbGVjdE9wdGlvbiB8IGFueT4gPSBbXTtcbiAgdmlzaWJsZVRhZ3MgPSBbXTtcbiAgaXNTZXJ2ZXJTZWFyY2hpbmcgPSBmYWxzZTtcbiAgaXNGaXJzdEZpbHRlcjogYm9vbGVhbiA9IHRydWU7XG4gIGZpbHRlclN1YmplY3QgPSBuZXcgU3ViamVjdCgpO1xuICBzZXJ2aWNlOiBQb011bHRpc2VsZWN0RmlsdGVyU2VydmljZTtcbiAgZGVmYXVsdFNlcnZpY2U6IFBvTXVsdGlzZWxlY3RGaWx0ZXJTZXJ2aWNlO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICBwcm90ZWN0ZWQgb25Nb2RlbFRvdWNoZWQ6IGFueSA9IG51bGw7XG5cbiAgcHJvdGVjdGVkIGNsaWNrT3V0TGlzdGVuZXI6ICgpID0+IHZvaWQ7XG4gIHByb3RlY3RlZCByZXNpemVMaXN0ZW5lcjogKCkgPT4gdm9pZDtcbiAgcHJvdGVjdGVkIGdldE9iamVjdHNCeVZhbHVlc1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gIHByaXZhdGUgX2ZpbHRlclNlcnZpY2U/OiBQb011bHRpc2VsZWN0RmlsdGVyIHwgc3RyaW5nO1xuICBwcml2YXRlIF9kZWJvdW5jZVRpbWU/OiBudW1iZXIgPSA0MDA7XG4gIHByaXZhdGUgX2Rpc2FibGVkPzogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9maWx0ZXJNb2RlPzogUG9NdWx0aXNlbGVjdEZpbHRlck1vZGUgPSBQb011bHRpc2VsZWN0RmlsdGVyTW9kZS5zdGFydHNXaXRoO1xuICBwcml2YXRlIF9oaWRlU2VhcmNoPzogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9saXRlcmFsczogUG9NdWx0aXNlbGVjdExpdGVyYWxzO1xuICBwcml2YXRlIF9vcHRpb25zOiBBcnJheTxQb011bHRpc2VsZWN0T3B0aW9uIHwgYW55PjtcbiAgcHJpdmF0ZSBfcmVxdWlyZWQ/OiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX3NvcnQ/OiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2F1dG9IZWlnaHQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfZmllbGRMYWJlbD86IHN0cmluZyA9IFBPX01VTFRJU0VMRUNUX0ZJRUxEX0xBQkVMX0RFRkFVTFQ7XG4gIHByaXZhdGUgX2ZpZWxkVmFsdWU/OiBzdHJpbmcgPSBQT19NVUxUSVNFTEVDVF9GSUVMRF9WQUxVRV9ERUZBVUxUO1xuICBwcml2YXRlIGxhbmd1YWdlOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBsYXN0TGVuZ3RoTW9kZWw7XG4gIHByaXZhdGUgb25Nb2RlbENoYW5nZTogYW55O1xuICBwcml2YXRlIHZhbGlkYXRvckNoYW5nZTogYW55O1xuICBwcml2YXRlIGF1dG9IZWlnaHRJbml0aWFsVmFsdWU6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogTmVzdGEgcHJvcHJpZWRhZGUgcG9kZSBzZXIgaW5mb3JtYWRhIGEgVVJMIGRvIHNlcnZpw6dvIGVtIHF1ZSBzZXLDoSByZWFsaXphZG8gbyBmaWx0cm8gcGFyYSBjYXJyZWdhbWVudG8gZGEgbGlzdGEgZGUgaXRlbnMgbm8gY29tcG9uZW50ZS5cbiAgICpcbiAgICpUYW1iw6ltIGV4aXN0ZSBhIHBvc3NpYmlsaWRhZGUgZGUgaW5mb3JtYXIgdW0gc2VydmnDp28gaW1wbGVtZW50YW5kbyBhIGludGVyZmFjZSBgUG9NdWx0aXNlbGVjdEZpbHRlcmAuXG4gICAqXG4gICAqQ2FzbyB1dGlsaXphZG8gdW1hIFVSTCwgbyBzZXJ2acOnbyBkZXZlIHNlciByZXRvcm5hZG8gbm8gcGFkcsOjbyBbQVBJIFBPIFVJXShodHRwczovL3BvLXVpLmlvL2d1aWRlcy9hcGkpIGUgdXRpbGl6YXIgYXMgcHJvcHJpZWRhZGVzIGBwLWZpZWxkLWxhYmVsYCBlIGBwLWZpZWxkLXZhbHVlYCBwYXJhIGEgY29uc3RydcOnw6NvIGRhIGxpc3RhIGRlIGl0ZW5zLlxuICAgKlxuICAgKlF1YW5kbyB1dGlsaXphZGEgdW1hIFVSTCBkZSBzZXJ2acOnbywgZW50w6NvIHNlcsOhIGNvbmNhdGVuYWRhIG5lc3RhIFVSTCBvIHZhbG9yIHF1ZSBkZXNlamEtc2UgZmlsdHJhciBkYSBzZWd1aW50ZSBmb3JtYTpcbiAgICpcbiAgICpgYGBcbiAgICogLy8gY2FzbyBmaWx0cmFyIHBvciBcIlBldGVyXCJcbiAgICogIGh0dHBzOi8vbG9jYWxob3N0OjgwODAvYXBpL2hlcm9lcz9maWx0ZXI9UGV0ZXJcbiAgICpgYGBcbiAgICpcbiAgICpFIGNhc28gaW5pY2lhciBvIGNhbXBvIGNvbSB2YWxvciwgb3MgaXRlbnMgc2Vyw6NvIGJ1c2NhZG9zIGRhIHNlZ3VpbnRlIGZvcm1hOlxuICAgKlxuICAgKmBgYFxuICAgKiAvLyBjYXNvIG8gdmFsb3IgZG8gY2FtcG8gZm9yIFsxMjM0LCA1Njc4XTtcbiAgICogIGh0dHBzOi8vbG9jYWxob3N0OjgwODAvYXBpL2hlcm9lcz92YWx1ZT0xMjM0LDU2NzhcbiAgICpcbiAgICogLy9PICp2YWx1ZSogw6kgcmVmZXJlbnRlIGFvIGBmaWVsZFZhbHVlYC5cbiAgICpgYGBcbiAgICpcbiAgICovXG4gIEBJbnB1dCgncC1maWx0ZXItc2VydmljZScpIHNldCBmaWx0ZXJTZXJ2aWNlKHZhbHVlOiBQb011bHRpc2VsZWN0RmlsdGVyIHwgc3RyaW5nKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLl9maWx0ZXJTZXJ2aWNlID0gdmFsdWU7XG4gICAgICB0aGlzLmF1dG9IZWlnaHQgPSB0aGlzLmF1dG9IZWlnaHRJbml0aWFsVmFsdWUgIT09IHVuZGVmaW5lZCA/IHRoaXMuYXV0b0hlaWdodEluaXRpYWxWYWx1ZSA6IHRydWU7XG4gICAgICB0aGlzLm9wdGlvbnMgPSBbXTtcbiAgICB9XG4gIH1cblxuICBnZXQgZmlsdGVyU2VydmljZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fZmlsdGVyU2VydmljZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIERlZmluZSBxdWUgYSBhbHR1cmEgZG8gY29tcG9uZW50ZSBzZXLDoSBhdXRvIGFqdXN0w6F2ZWwsIHBvc3N1aW5kbyB1bWEgYWx0dXJhIG1pbmltYSBwb3LDqW0gYSBhbHR1cmEgbcOheGltYSBzZXLDoSBkZSBhY29yZG9cbiAgICogY29tIG8gbsO6bWVybyBkZSBpdGVucyBzZWxlY2lvbmFkb3MgZSBhIGV4dGVuc8OjbyBkb3MgbWVzbW9zLCBtYW50ZW5kby1vcyBzZW1wcmUgdmlzw612ZWlzLlxuICAgKlxuICAgKiA+IE8gdmFsb3IgcGFkcsOjbyBzZXLDoSBgdHJ1ZWAgcXVhbmRvIGhvdXZlciBzZXJ2acOnbyAoYHAtZmlsdGVyLXNlcnZpY2VgKS5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KHsgYWxpYXM6ICdwLWF1dG8taGVpZ2h0JywgdHJhbnNmb3JtOiBjb252ZXJ0VG9Cb29sZWFuIH0pIHNldCBhdXRvSGVpZ2h0KHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fYXV0b0hlaWdodCA9IHZhbHVlO1xuICAgIHRoaXMuYXV0b0hlaWdodEluaXRpYWxWYWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IGF1dG9IZWlnaHQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2F1dG9IZWlnaHQ7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBFc3RhIHByb3ByaWVkYWRlIGRlZmluZSBlbSBxdWFudG8gdGVtcG8gKGVtIG1pbGlzc2VndW5kb3MpLCBhZ3VhcmRhIHBhcmEgYWNpb25hciBvIGV2ZW50byBkZSBmaWx0cm8gYXDDs3MgY2FkYSBwcmVzc2lvbmFtZW50byBkZSB0ZWNsYS5cbiAgICpcbiAgICogPiBTZXLDoSB1dGlsaXphZGEgYXBlbmFzIHF1YW5kbyBob3V2ZXIgc2VydmnDp28gKGBwLWZpbHRlci1zZXJ2aWNlYCkgZSBzb21lbnRlIHNlcsOhIGFjZWl0byB2YWxvciBtYWlvciBkbyBxdWUgKnplcm8qLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgNDAwYFxuICAgKi9cbiAgQElucHV0KCdwLWRlYm91bmNlLXRpbWUnKSBzZXQgZGVib3VuY2VUaW1lKHZhbHVlOiBudW1iZXIpIHtcbiAgICBjb25zdCBwYXJzZWRWYWx1ZSA9IHBhcnNlSW50KDxhbnk+dmFsdWUsIDEwKTtcblxuICAgIHRoaXMuX2RlYm91bmNlVGltZSA9ICFpc05hTihwYXJzZWRWYWx1ZSkgJiYgcGFyc2VkVmFsdWUgPiAwID8gcGFyc2VkVmFsdWUgOiBQT19NVUxUSVNFTEVDVF9ERUJPVU5DRV9USU1FX0RFRkFVTFQ7XG4gIH1cblxuICBnZXQgZGVib3VuY2VUaW1lKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2RlYm91bmNlVGltZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIE9iamV0byBjb20gYXMgbGl0ZXJhaXMgdXNhZGFzIG5vIGBwby1tdWx0aXNlbGVjdGAuXG4gICAqXG4gICAqIEV4aXN0ZW0gZHVhcyBtYW5laXJhcyBkZSBjdXN0b21pemFyIG8gY29tcG9uZW50ZSwgcGFzc2FuZG8gdW0gb2JqZXRvIGNvbSB0b2RhcyBhcyBsaXRlcmFpcyBkaXNwb27DrXZlaXM6XG4gICAqXG4gICAqIGBgYFxuICAgKiAgY29uc3QgY3VzdG9tTGl0ZXJhbHM6IFBvTXVsdGlzZWxlY3RMaXRlcmFscyA9IHtcbiAgICogICAgbm9EYXRhOiAnTmVuaHVtIGRhZG8gZW5jb250cmFkbycsXG4gICAqICAgIHBsYWNlaG9sZGVyU2VhcmNoOiAnQnVzY2FyJyxcbiAgICogICAgc2VsZWN0QWxsOiAnU2VsZWN0IGFsbCcsXG4gICAqICAgIHNlbGVjdEl0ZW06ICdTZWxlY3QgaXRlbXMnXG4gICAqICB9O1xuICAgKiBgYGBcbiAgICpcbiAgICogT3UgcGFzc2FuZG8gYXBlbmFzIGFzIGxpdGVyYWlzIHF1ZSBkZXNlamEgY3VzdG9taXphcjpcbiAgICpcbiAgICogYGBgXG4gICAqICBjb25zdCBjdXN0b21MaXRlcmFsczogUG9NdWx0aXNlbGVjdExpdGVyYWxzID0ge1xuICAgKiAgICBub0RhdGE6ICdTZW0gZGFkb3MnXG4gICAqICB9O1xuICAgKiBgYGBcbiAgICpcbiAgICogRSBwYXJhIGNhcnJlZ2FyIGFzIGxpdGVyYWlzIGN1c3RvbWl6YWRhcywgYmFzdGEgYXBlbmFzIHBhc3NhciBvIG9iamV0byBwYXJhIG8gY29tcG9uZW50ZTpcbiAgICpcbiAgICogYGBgXG4gICAqIDxwby1tdWx0aXNlbGVjdFxuICAgKiAgIFtwLWxpdGVyYWxzXT1cImN1c3RvbUxpdGVyYWxzXCI+XG4gICAqIDwvcG8tcG8tbXVsdGlzZWxlY3Q+XG4gICAqIGBgYFxuICAgKlxuICAgKiA+IE8gb2JqZXRvIHBhZHLDo28gZGUgbGl0ZXJhaXMgc2Vyw6EgdHJhZHV6aWRvIGRlIGFjb3JkbyBjb20gbyBpZGlvbWEgZG9cbiAgICogW2BQb0kxOG5TZXJ2aWNlYF0oL2RvY3VtZW50YXRpb24vcG8taTE4bikgb3UgZG8gYnJvd3Nlci5cbiAgICovXG4gIEBJbnB1dCgncC1saXRlcmFscycpIHNldCBsaXRlcmFscyh2YWx1ZTogUG9NdWx0aXNlbGVjdExpdGVyYWxzKSB7XG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgT2JqZWN0ICYmICEodmFsdWUgaW5zdGFuY2VvZiBBcnJheSkpIHtcbiAgICAgIHRoaXMuX2xpdGVyYWxzID0ge1xuICAgICAgICAuLi5wb011bHRpc2VsZWN0TGl0ZXJhbHNEZWZhdWx0W3BvTG9jYWxlRGVmYXVsdF0sXG4gICAgICAgIC4uLnBvTXVsdGlzZWxlY3RMaXRlcmFsc0RlZmF1bHRbdGhpcy5sYW5ndWFnZV0sXG4gICAgICAgIC4uLnZhbHVlXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9saXRlcmFscyA9IHBvTXVsdGlzZWxlY3RMaXRlcmFsc0RlZmF1bHRbdGhpcy5sYW5ndWFnZV07XG4gICAgfVxuICB9XG5cbiAgZ2V0IGxpdGVyYWxzKCkge1xuICAgIHJldHVybiB0aGlzLl9saXRlcmFscyB8fCBwb011bHRpc2VsZWN0TGl0ZXJhbHNEZWZhdWx0W3RoaXMubGFuZ3VhZ2VdO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRGVmaW5lIHF1ZSBvIGNhbXBvIHNlcsOhIG9icmlnYXTDs3Jpby5cbiAgICpcbiAgICogPiBFc3RhIHByb3ByaWVkYWRlIMOpIGRlc2NvbnNpZGVyYWRhIHF1YW5kbyBvIGlucHV0IGVzdMOhIGRlc2FiaWxpdGFkbyBgKHAtZGlzYWJsZWQpYC5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KCdwLXJlcXVpcmVkJykgc2V0IHJlcXVpcmVkKHJlcXVpcmVkOiBib29sZWFuKSB7XG4gICAgdGhpcy5fcmVxdWlyZWQgPSA8YW55PnJlcXVpcmVkID09PSAnJyA/IHRydWUgOiBjb252ZXJ0VG9Cb29sZWFuKHJlcXVpcmVkKTtcbiAgICB0aGlzLnZhbGlkYXRlTW9kZWwoKTtcbiAgfVxuXG4gIGdldCByZXF1aXJlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcmVxdWlyZWQ7XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lIHNlIGEgaW5kaWNhw6fDo28gZGUgY2FtcG8gb2JyaWdhdMOzcmlvIHNlcsOhIGV4aWJpZGEuXG4gICAqXG4gICAqID4gTsOjbyBzZXLDoSBleGliaWRhIGEgaW5kaWNhw6fDo28gc2U6XG4gICAqIC0gTsOjbyBwb3NzdWlyIGBwLWhlbHBgIGUvb3UgYHAtbGFiZWxgLlxuICAgKi9cbiAgQElucHV0KCdwLXNob3ctcmVxdWlyZWQnKSBzaG93UmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBJbmRpY2EgcXVlIG8gY2FtcG8gc2Vyw6EgZGVzYWJpbGl0YWRvLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoJ3AtZGlzYWJsZWQnKSBzZXQgZGlzYWJsZWQoZGlzYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9kaXNhYmxlZCA9IDxhbnk+ZGlzYWJsZWQgPT09ICcnID8gdHJ1ZSA6IGNvbnZlcnRUb0Jvb2xlYW4oZGlzYWJsZWQpO1xuICAgIHRoaXMudmFsaWRhdGVNb2RlbCgpO1xuXG4gICAgdGhpcy51cGRhdGVWaXNpYmxlSXRlbXMoKTtcbiAgfVxuXG4gIGdldCBkaXNhYmxlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBFc2NvbmRlIG8gY2FtcG8gZGUgcGVzcXVpc2EgZXhpc3RlbnRlIGRlbnRybyBkbyBkcm9wZG93biBkbyBwby1tdWx0aXNlbGVjdC5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KCdwLWhpZGUtc2VhcmNoJykgc2V0IGhpZGVTZWFyY2goaGlkZVNlYXJjaDogYm9vbGVhbikge1xuICAgIHRoaXMuX2hpZGVTZWFyY2ggPSA8YW55PmhpZGVTZWFyY2ggPT09ICcnID8gdHJ1ZSA6IGNvbnZlcnRUb0Jvb2xlYW4oaGlkZVNlYXJjaCk7XG4gIH1cblxuICBnZXQgaGlkZVNlYXJjaCgpIHtcbiAgICByZXR1cm4gdGhpcy5faGlkZVNlYXJjaDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogTmVzdGEgcHJvcHJpZWRhZGUgZGV2ZSBzZXIgZGVmaW5pZGEgdW1hIGxpc3RhIGRlIG9iamV0b3MgcXVlIHNlcsOhIGV4aWJpZGEgbm8gbXVsdGlzZWxlY3QuXG4gICAqIEVzdGEgbGlzdGEgZGV2ZSBjb250ZXIgb3MgdmFsb3JlcyBlIG9zIGxhYmVscyBxdWUgc2Vyw6NvIGFwcmVzZW50YWRvcyBuYSB0ZWxhLlxuICAgKlxuICAgKiA+IEVzc2EgcHJvcHJpZWRhZGUgw6kgaW11dMOhdmVsLCBvdSBzZWphLCBzZW1wcmUgcXVlIHF1aXNlciBhdHVhbGl6YXIgYSBsaXN0YSBkZSBvcMOnw7VlcyBkaXNwb27DrXZlaXNcbiAgICogYXR1YWxpemUgYSByZWZlcsOqbmNpYSBkbyBvYmpldG86XG4gICAqXG4gICAqIGBgYFxuICAgKiAvLyBhdHVhbGl6YSBhIHJlZmVyw6puY2lhIGRvIG9iamV0byBnYXJhbnRpbmRvIGEgYXR1YWxpemHDp8OjbyBkbyB0ZW1wbGF0ZVxuICAgKiB0aGlzLm9wdGlvbnMgPSBbLi4udGhpcy5vcHRpb25zLCB7IHZhbHVlOiAneCcsIGxhYmVsOiAnTm92YSBvcMOnw6NvJyB9XTtcbiAgICpcbiAgICogLy8gZXZpdGUsIHBvaXMgbsOjbyBhdHVhbGl6YSBhIHJlZmVyw6puY2lhIGRvIG9iamV0byBwb2RlbmRvIGdlcmFyIGF0cmFzb3MgbmEgYXR1YWxpemHDp8OjbyBkbyB0ZW1wbGF0ZVxuICAgKiB0aGlzLm9wdGlvbnMucHVzaCh7IHZhbHVlOiAneCcsIGxhYmVsOiAnTm92YSBvcMOnw6NvJyB9KTtcbiAgICogYGBgXG4gICAqID4gQSBsaXN0YSBwb2RlIHNlciBkZWZpbmlkYSB1dGlsaXphbmRvIHVtIGFycmF5IGNvbSBvIHZhbG9yIHJlcHJlc2VudGFuZG8gYHZhbHVlYCBlIGBsYWJlbGAgZGFzIHNlZ3VpbnRlcyBmb3JtYXM6XG4gICAqXG4gICAqIGBgYFxuICAgKiA8cG8tbXVsdGlzZWxlY3QgbmFtZT1cIm11bHRpc2VsZWN0XCIgcC1sYWJlbD1cIlBPIE11bHRpc2VsZWN0XCIgW3Atb3B0aW9uc109XCJbe3ZhbHVlOiAxLCBsYWJlbDogJ09uZSd9LCB7dmFsdWU6IDIsIGxhYmVsOiAndHdvJ31dXCI+IDwvcG8tbXVsdGlzZWxlY3Q+XG4gICAqIGBgYFxuICAgKlxuICAgKiBgYGBcbiAgICogPHBvLW11bHRpc2VsZWN0IG5hbWU9XCJtdWx0aXNlbGVjdFwiIHAtbGFiZWw9XCJQTyBNdWx0aXNlbGVjdFwiIFtwLW9wdGlvbnNdPVwiW3tuYW1lOiAnUm9nZXInLCBhZ2U6IDI4fSwge25hbWU6ICdBbm5lJywgYWdlOiAzNX1dXCIgcC1maWVsZC1sYWJlbD1cIm5hbWVcIiBwLWZpZWxkLXZhbHVlPVwiYWdlXCI+IDwvcG8tbXVsdGlzZWxlY3Q+XG4gICAqIGBgYFxuICAgKlxuICAgKiAtIEFjb25zZWxoYS1zZSB1dGlsaXphciB2YWxvcmVzIGRpc3RpbnRvcyBubyBgbGFiZWxgIGUgYHZhbHVlYCBkb3MgaXRlbnMuXG4gICAqL1xuICBASW5wdXQoJ3Atb3B0aW9ucycpIHNldCBvcHRpb25zKG9wdGlvbnM6IEFycmF5PFBvTXVsdGlzZWxlY3RPcHRpb24gfCBhbnk+KSB7XG4gICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XG4gIH1cblxuICBnZXQgb3B0aW9ucygpOiBBcnJheTxQb011bHRpc2VsZWN0T3B0aW9uIHwgYW55PiB7XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBJbmRpY2EgcXVlIGEgbGlzdGEgZGVmaW5pZGEgbmEgcHJvcHJpZWRhZGUgcC1vcHRpb25zIHNlcsOhIG9yZGVuYWRhIHBlbG8gbGFiZWwgYW50ZXMgZGUgc2VyIGFwcmVzZW50YWRhIG5vXG4gICAqIGRyb3Bkb3duLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoJ3Atc29ydCcpIHNldCBzb3J0KHNvcnQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9zb3J0ID0gPGFueT5zb3J0ID09PSAnJyA/IHRydWUgOiBjb252ZXJ0VG9Cb29sZWFuKHNvcnQpO1xuXG4gICAgdGhpcy52YWxpZEFuZFNvcnRPcHRpb25zKCk7XG4gIH1cblxuICBnZXQgc29ydCgpIHtcbiAgICByZXR1cm4gdGhpcy5fc29ydDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIERlZmluZSBvIG1vZG8gZGUgcGVzcXVpc2EgdXRpbGl6YWRvIG5vIGNhbXBvIGRlIGJ1c2NhLCBxdWFuZG8gaGFiaWxpdGFkby5cbiAgICogVmFsb3JlcyBkZWZpbmlkb3Mgbm8gZW51bTogUG9NdWx0aXNlbGVjdEZpbHRlck1vZGVcbiAgICpcbiAgICogQGRlZmF1bHQgYHN0YXJ0c1dpdGhgXG4gICAqL1xuICBASW5wdXQoJ3AtZmlsdGVyLW1vZGUnKSBzZXQgZmlsdGVyTW9kZShmaWx0ZXJNb2RlOiBQb011bHRpc2VsZWN0RmlsdGVyTW9kZSkge1xuICAgIHRoaXMuX2ZpbHRlck1vZGUgPSBmaWx0ZXJNb2RlIGluIFBvTXVsdGlzZWxlY3RGaWx0ZXJNb2RlID8gZmlsdGVyTW9kZSA6IFBvTXVsdGlzZWxlY3RGaWx0ZXJNb2RlLnN0YXJ0c1dpdGg7XG4gICAgc3dpdGNoICh0aGlzLl9maWx0ZXJNb2RlLnRvU3RyaW5nKCkpIHtcbiAgICAgIGNhc2UgJ3N0YXJ0c1dpdGgnOlxuICAgICAgICB0aGlzLl9maWx0ZXJNb2RlID0gUG9NdWx0aXNlbGVjdEZpbHRlck1vZGUuc3RhcnRzV2l0aDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdjb250YWlucyc6XG4gICAgICAgIHRoaXMuX2ZpbHRlck1vZGUgPSBQb011bHRpc2VsZWN0RmlsdGVyTW9kZS5jb250YWlucztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdlbmRzV2l0aCc6XG4gICAgICAgIHRoaXMuX2ZpbHRlck1vZGUgPSBQb011bHRpc2VsZWN0RmlsdGVyTW9kZS5lbmRzV2l0aDtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGZpbHRlck1vZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbHRlck1vZGU7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBEZXZlIHNlciBpbmZvcm1hZG8gbyBub21lIGRhIHByb3ByaWVkYWRlIGRvIG9iamV0byBxdWUgc2Vyw6EgdXRpbGl6YWRvIHBhcmEgYSBjb252ZXJzw6NvIGRvcyBpdGVucyBhcHJlc2VudGFkb3MgbmEgbGlzdGEgZG8gY29tcG9uZW50ZVxuICAgKiAoYHAtb3B0aW9uc2ApLCBlc3RhIHByb3ByaWVkYWRlIHNlcsOhIHJlc3BvbnPDoXZlbCBwZWxvIHRleHRvIGRlIGFwcmVzZW50YcOnw6NvIGRlIGNhZGEgaXRlbSBkYSBsaXN0YS5cbiAgICpcbiAgICogTmVjZXNzw6FyaW8gcXVhbmRvIGluZm9ybWFyIG8gc2VydmnDp28gY29tbyBVUkwgZSBvIG1lc21vIG7Do28gZXN0aXZlciByZXRvcm5hbmRvIHVtYSBsaXN0YSBkZSBvYmpldG9zIG5vIHBhZHLDo28gZGEgaW50ZXJmYWNlXG4gICAqIGBQb011bHRpU2VsZWN0T3B0aW9uYC5cbiAgICpcbiAgICogQGRlZmF1bHQgYGxhYmVsYFxuICAgKi9cbiAgQElucHV0KCdwLWZpZWxkLWxhYmVsJykgc2V0IGZpZWxkTGFiZWwodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX2ZpZWxkTGFiZWwgPSB2YWx1ZSA/IHZhbHVlIDogUE9fTVVMVElTRUxFQ1RfRklFTERfTEFCRUxfREVGQVVMVDtcblxuICAgIGlmIChpc1R5cGVvZih0aGlzLmZpbHRlclNlcnZpY2UsICdzdHJpbmcnKSAmJiB0aGlzLnNlcnZpY2UpIHtcbiAgICAgIHRoaXMuc2VydmljZS5maWVsZExhYmVsID0gdGhpcy5fZmllbGRMYWJlbDtcbiAgICB9XG4gIH1cblxuICBnZXQgZmllbGRMYWJlbCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZmllbGRMYWJlbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIERldmUgc2VyIGluZm9ybWFkbyBvIG5vbWUgZGEgcHJvcHJpZWRhZGUgZG8gb2JqZXRvIHF1ZSBzZXLDoSB1dGlsaXphZG8gcGFyYSBhIGNvbnZlcnPDo28gZG9zIGl0ZW5zIGFwcmVzZW50YWRvcyBuYSBsaXN0YSBkbyBjb21wb25lbnRlXG4gICAqIChgcC1vcHRpb25zYCksIGVzdGEgcHJvcHJpZWRhZGUgc2Vyw6EgcmVzcG9uc8OhdmVsIHBlbG8gdmFsb3IgZGUgY2FkYSBpdGVtIGRhIGxpc3RhLlxuICAgKlxuICAgKiBOZWNlc3PDoXJpbyBxdWFuZG8gaW5mb3JtYXIgbyBzZXJ2acOnbyBjb21vIFVSTCBlIG8gbWVzbW8gbsOjbyBlc3RpdmVyIHJldG9ybmFuZG8gdW1hIGxpc3RhIGRlIG9iamV0b3Mgbm8gcGFkcsOjbyBkYSBpbnRlcmZhY2VcbiAgICogYFBvTXVsdGlTZWxlY3RPcHRpb25gLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdmFsdWVgXG4gICAqL1xuICBASW5wdXQoJ3AtZmllbGQtdmFsdWUnKSBzZXQgZmllbGRWYWx1ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fZmllbGRWYWx1ZSA9IHZhbHVlID8gdmFsdWUgOiBQT19NVUxUSVNFTEVDVF9GSUVMRF9WQUxVRV9ERUZBVUxUO1xuXG4gICAgaWYgKGlzVHlwZW9mKHRoaXMuZmlsdGVyU2VydmljZSwgJ3N0cmluZycpICYmIHRoaXMuc2VydmljZSkge1xuICAgICAgdGhpcy5zZXJ2aWNlLmZpZWxkVmFsdWUgPSB0aGlzLl9maWVsZFZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIGdldCBmaWVsZFZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLl9maWVsZFZhbHVlO1xuICB9XG5cbiAgY29uc3RydWN0b3IobGFuZ3VhZ2VTZXJ2aWNlOiBQb0xhbmd1YWdlU2VydmljZSkge1xuICAgIHRoaXMubGFuZ3VhZ2UgPSBsYW5ndWFnZVNlcnZpY2UuZ2V0U2hvcnRMYW5ndWFnZSgpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKHRoaXMuZmlsdGVyU2VydmljZSkge1xuICAgICAgdGhpcy5zZXRTZXJ2aWNlKHRoaXMuZmlsdGVyU2VydmljZSk7XG4gICAgfVxuXG4gICAgdGhpcy5maWx0ZXJTdWJqZWN0XG4gICAgICAucGlwZShcbiAgICAgICAgZGVib3VuY2VUaW1lKHRoaXMuZGVib3VuY2VUaW1lKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgdGFwKCgpID0+ICh0aGlzLmlzU2VydmVyU2VhcmNoaW5nID0gdHJ1ZSkpLFxuICAgICAgICBzd2l0Y2hNYXAoKHNlYXJjaDogc3RyaW5nKSA9PiB0aGlzLmFwcGx5RmlsdGVyKHNlYXJjaCkpLFxuICAgICAgICB0YXAoKCkgPT4gKHRoaXMuaXNTZXJ2ZXJTZWFyY2hpbmcgPSBmYWxzZSkpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICB0aGlzLnNldExhYmVsc0FuZFZhbHVlc09wdGlvbnMoKTtcbiAgICB0aGlzLnZhbGlkQW5kU29ydE9wdGlvbnMoKTtcbiAgICB0aGlzLnVwZGF0ZUxpc3QodGhpcy5vcHRpb25zKTtcbiAgfVxuXG4gIHNldFNlcnZpY2Uoc2VydmljZTogUG9NdWx0aXNlbGVjdEZpbHRlciB8IHN0cmluZykge1xuICAgIGlmIChpc1R5cGVvZihzZXJ2aWNlLCAnb2JqZWN0JykpIHtcbiAgICAgIHRoaXMuc2VydmljZSA9IDxQb011bHRpc2VsZWN0RmlsdGVyU2VydmljZT5zZXJ2aWNlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlcnZpY2UgPSB0aGlzLmRlZmF1bHRTZXJ2aWNlO1xuICAgICAgdGhpcy5zZXJ2aWNlLmNvbmZpZ1Byb3BlcnRpZXMoPHN0cmluZz5zZXJ2aWNlLCB0aGlzLmZpZWxkTGFiZWwsIHRoaXMuZmllbGRWYWx1ZSk7XG4gICAgfVxuXG4gICAgdGhpcy5pc0ZpcnN0RmlsdGVyID0gdHJ1ZTtcbiAgfVxuXG4gIHZhbGlkQW5kU29ydE9wdGlvbnMoKSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICByZW1vdmVVbmRlZmluZWRBbmROdWxsT3B0aW9uc1dpdGhGaWVsZFZhbHVlKHRoaXMub3B0aW9ucywgdGhpcy5maWVsZFZhbHVlKTtcbiAgICAgIHJlbW92ZUR1cGxpY2F0ZWRPcHRpb25zV2l0aEZpZWxkVmFsdWUodGhpcy5vcHRpb25zLCB0aGlzLmZpZWxkVmFsdWUpO1xuICAgICAgdGhpcy5zZXRVbmRlZmluZWRMYWJlbHModGhpcy5vcHRpb25zKTtcblxuICAgICAgaWYgKHRoaXMuc29ydCkge1xuICAgICAgICBzb3J0T3B0aW9uc0J5UHJvcGVydHkodGhpcy5vcHRpb25zLCB0aGlzLmZpZWxkTGFiZWwpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHNldFVuZGVmaW5lZExhYmVscyhvcHRpb25zKSB7XG4gICAgb3B0aW9ucy5mb3JFYWNoKG9wdGlvbiA9PiB7XG4gICAgICBpZiAoIW9wdGlvblt0aGlzLmZpZWxkTGFiZWxdKSB7XG4gICAgICAgIG9wdGlvblt0aGlzLmZpZWxkTGFiZWxdID0gb3B0aW9uW3RoaXMuZmllbGRWYWx1ZV07XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICB1cGRhdGVMaXN0KG9wdGlvbnM6IEFycmF5PFBvTXVsdGlzZWxlY3RPcHRpb24gfCBhbnk+KSB7XG4gICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgIHRoaXMudmlzaWJsZU9wdGlvbnNEcm9wZG93biA9IG9wdGlvbnM7XG4gICAgfVxuICB9XG5cbiAgY2FsbE9uQ2hhbmdlKHNlbGVjdGVkT3B0aW9uczogQXJyYXk8UG9NdWx0aXNlbGVjdE9wdGlvbiB8IGFueT4pIHtcbiAgICBpZiAodGhpcy5vbk1vZGVsQ2hhbmdlKSB7XG4gICAgICB0aGlzLm9uTW9kZWxDaGFuZ2UodGhpcy5nZXRWYWx1ZXNGcm9tT3B0aW9ucyhzZWxlY3RlZE9wdGlvbnMpKTtcbiAgICAgIHRoaXMuZXZlbnRDaGFuZ2Uoc2VsZWN0ZWRPcHRpb25zKTtcbiAgICB9XG4gIH1cblxuICBldmVudENoYW5nZShzZWxlY3RlZE9wdGlvbnMpIHtcbiAgICBpZiAoc2VsZWN0ZWRPcHRpb25zICYmIHRoaXMubGFzdExlbmd0aE1vZGVsICE9PSBzZWxlY3RlZE9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICB0aGlzLmNoYW5nZS5lbWl0KHNlbGVjdGVkT3B0aW9ucyk7XG4gICAgfVxuICAgIHRoaXMubGFzdExlbmd0aE1vZGVsID0gc2VsZWN0ZWRPcHRpb25zID8gc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCA6IG51bGw7XG4gIH1cblxuICBnZXRWYWx1ZXNGcm9tT3B0aW9ucyhzZWxlY3RlZE9wdGlvbnM6IEFycmF5PFBvTXVsdGlzZWxlY3RPcHRpb24gfCBhbnk+KSB7XG4gICAgcmV0dXJuIHNlbGVjdGVkT3B0aW9ucyAmJiBzZWxlY3RlZE9wdGlvbnMubGVuZ3RoID8gc2VsZWN0ZWRPcHRpb25zLm1hcChvcHRpb24gPT4gb3B0aW9uW3RoaXMuZmllbGRWYWx1ZV0pIDogW107XG4gIH1cblxuICBnZXRMYWJlbEJ5VmFsdWUodmFsdWUpIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMub3B0aW9ucy5maW5kSW5kZXgob3B0aW9uID0+IG9wdGlvblt0aGlzLmZpZWxkVmFsdWVdID09PSB2YWx1ZSk7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9uc1tpbmRleF0ubGFiZWw7XG4gIH1cblxuICBzZWFyY2hCeUxhYmVsKHNlYXJjaDogc3RyaW5nLCBvcHRpb25zOiBBcnJheTxQb011bHRpc2VsZWN0T3B0aW9uIHwgYW55PiwgZmlsdGVyTW9kZTogUG9NdWx0aXNlbGVjdEZpbHRlck1vZGUpIHtcbiAgICBpZiAoc2VhcmNoICYmIG9wdGlvbnMgJiYgb3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IG5ld09wdGlvbnM6IEFycmF5PFBvTXVsdGlzZWxlY3RPcHRpb24gfCBhbnk+ID0gW107XG4gICAgICBvcHRpb25zLmZvckVhY2gob3B0aW9uID0+IHtcbiAgICAgICAgaWYgKG9wdGlvblt0aGlzLmZpZWxkTGFiZWxdICYmIHRoaXMuY29tcGFyZU1ldGhvZChzZWFyY2gsIG9wdGlvbiwgZmlsdGVyTW9kZSkpIHtcbiAgICAgICAgICBuZXdPcHRpb25zLnB1c2gob3B0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB0aGlzLnZpc2libGVPcHRpb25zRHJvcGRvd24gPSBuZXdPcHRpb25zO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnZpc2libGVPcHRpb25zRHJvcGRvd24gPSBbLi4ub3B0aW9uc107XG4gICAgfVxuICB9XG5cbiAgY29tcGFyZU1ldGhvZChzZWFyY2g6IHN0cmluZywgb3B0aW9uOiBQb011bHRpc2VsZWN0T3B0aW9uLCBmaWx0ZXJNb2RlOiBQb011bHRpc2VsZWN0RmlsdGVyTW9kZSkge1xuICAgIHN3aXRjaCAoZmlsdGVyTW9kZSkge1xuICAgICAgY2FzZSBQb011bHRpc2VsZWN0RmlsdGVyTW9kZS5zdGFydHNXaXRoOlxuICAgICAgICByZXR1cm4gdGhpcy5zdGFydHNXaXRoKHNlYXJjaCwgb3B0aW9uKTtcbiAgICAgIGNhc2UgUG9NdWx0aXNlbGVjdEZpbHRlck1vZGUuY29udGFpbnM6XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5zKHNlYXJjaCwgb3B0aW9uKTtcbiAgICAgIGNhc2UgUG9NdWx0aXNlbGVjdEZpbHRlck1vZGUuZW5kc1dpdGg6XG4gICAgICAgIHJldHVybiB0aGlzLmVuZHNXaXRoKHNlYXJjaCwgb3B0aW9uKTtcbiAgICB9XG4gIH1cblxuICBzdGFydHNXaXRoKHNlYXJjaDogc3RyaW5nLCBvcHRpb246IFBvTXVsdGlzZWxlY3RPcHRpb24pIHtcbiAgICByZXR1cm4gb3B0aW9uW3RoaXMuZmllbGRMYWJlbF0udG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKHNlYXJjaC50b0xvd2VyQ2FzZSgpKTtcbiAgfVxuXG4gIGNvbnRhaW5zKHNlYXJjaDogc3RyaW5nLCBvcHRpb246IFBvTXVsdGlzZWxlY3RPcHRpb24pIHtcbiAgICByZXR1cm4gb3B0aW9uW3RoaXMuZmllbGRMYWJlbF0udG9Mb3dlckNhc2UoKS5pbmRleE9mKHNlYXJjaC50b0xvd2VyQ2FzZSgpKSA+IC0xO1xuICB9XG5cbiAgZW5kc1dpdGgoc2VhcmNoOiBzdHJpbmcsIG9wdGlvbjogUG9NdWx0aXNlbGVjdE9wdGlvbikge1xuICAgIHJldHVybiBvcHRpb25bdGhpcy5maWVsZExhYmVsXS50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKHNlYXJjaC50b0xvd2VyQ2FzZSgpKTtcbiAgfVxuXG4gIHZhbGlkYXRlKGM6IEFic3RyYWN0Q29udHJvbCk6IHsgW2tleTogc3RyaW5nXTogYW55IH0ge1xuICAgIGlmIChyZXF1aXJlZEZhaWxlZCh0aGlzLnJlcXVpcmVkLCB0aGlzLmRpc2FibGVkLCBjLnZhbHVlKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVxdWlyZWQ6IHtcbiAgICAgICAgICB2YWxpZDogZmFsc2VcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHVwZGF0ZVNlbGVjdGVkT3B0aW9ucyhuZXdPcHRpb25zOiBBcnJheTxhbnk+LCBvcHRpb25zID0gdGhpcy5vcHRpb25zKSB7XG4gICAgdGhpcy5zZWxlY3RlZE9wdGlvbnMgPSBbXTtcblxuICAgIGlmIChuZXdPcHRpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5sYXN0TGVuZ3RoTW9kZWwgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZmlsdGVyU2VydmljZSkge1xuICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbnMgPSBuZXdPcHRpb25zO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdPcHRpb25zLmZvckVhY2gobmV3T3B0aW9uID0+IHtcbiAgICAgICAgb3B0aW9ucy5mb3JFYWNoKG9wdGlvbiA9PiB7XG4gICAgICAgICAgaWYgKG9wdGlvblt0aGlzLmZpZWxkVmFsdWVdID09PSBuZXdPcHRpb25bdGhpcy5maWVsZFZhbHVlXSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbnMucHVzaChvcHRpb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZVZpc2libGVJdGVtcygpO1xuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZXM6IGFueSk6IHZvaWQge1xuICAgIHZhbHVlcyA9IHZhbHVlcyB8fCBbXTtcblxuICAgIGlmICh0aGlzLnNlcnZpY2UgJiYgdmFsdWVzLmxlbmd0aCkge1xuICAgICAgdGhpcy5nZXRPYmplY3RzQnlWYWx1ZXNTdWJzY3JpcHRpb24gPSB0aGlzLnNlcnZpY2UuZ2V0T2JqZWN0c0J5VmFsdWVzKHZhbHVlcykuc3Vic2NyaWJlKG9wdGlvbnMgPT4ge1xuICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkT3B0aW9ucyhvcHRpb25zKTtcbiAgICAgICAgdGhpcy5jYWxsT25DaGFuZ2UodGhpcy5zZWxlY3RlZE9wdGlvbnMpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFZhbGlkYXIgc2UgdG9kb3Mgb3MgaXRlbXMgZXhpc3RlbSBlbnRyZSBvcyBvcHRpb25zLCBzZW7Do28gYXR1YWxpemFyIG8gbW9kZWxcbiAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRPcHRpb25zKHZhbHVlcy5tYXAodmFsdWUgPT4gKHsgW3RoaXMuZmllbGRWYWx1ZV06IHZhbHVlIH0pKSk7XG5cbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkT3B0aW9ucyAmJiB0aGlzLnNlbGVjdGVkT3B0aW9ucy5sZW5ndGggPCB2YWx1ZXMubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuY2FsbE9uQ2hhbmdlKHRoaXMuc2VsZWN0ZWRPcHRpb25zKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBGdW7Dp8OjbyBpbXBsZW1lbnRhZGEgZG8gQ29udHJvbFZhbHVlQWNjZXNzb3JcbiAgLy8gVXNhZGEgcGFyYSBpbnRlcmNlcHRhciBvcyBlc3RhZG9zIGRlIGhhYmlsaXRhZG8gdmlhIGZvcm1zIGFwaVxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25Nb2RlbENoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25Nb2RlbFRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2UoZm46ICgpID0+IHZvaWQpIHtcbiAgICB0aGlzLnZhbGlkYXRvckNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRMYWJlbHNBbmRWYWx1ZXNPcHRpb25zKCkge1xuICAgIGlmICh0aGlzLmZpZWxkTGFiZWwgJiYgdGhpcy5maWVsZFZhbHVlICYmIHRoaXMub3B0aW9ucykge1xuICAgICAgdGhpcy5vcHRpb25zLm1hcChvcHRpb24gPT4ge1xuICAgICAgICBvcHRpb24ubGFiZWwgPSBvcHRpb25bdGhpcy5maWVsZExhYmVsXTtcbiAgICAgICAgb3B0aW9uLnZhbHVlID0gb3B0aW9uW3RoaXMuZmllbGRWYWx1ZV07XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHZhbGlkYXRlTW9kZWwoKSB7XG4gICAgaWYgKHRoaXMudmFsaWRhdG9yQ2hhbmdlKSB7XG4gICAgICB0aGlzLnZhbGlkYXRvckNoYW5nZSgpO1xuICAgIH1cbiAgfVxuXG4gIGFic3RyYWN0IGFwcGx5RmlsdGVyKHZhbHVlPzogc3RyaW5nKTogT2JzZXJ2YWJsZTxBcnJheTxQb011bHRpc2VsZWN0T3B0aW9uIHwgYW55Pj47XG4gIGFic3RyYWN0IHVwZGF0ZVZpc2libGVJdGVtcygpOiB2b2lkO1xufVxuIl19
|