@c8y/ngx-components 1021.49.1 → 1021.49.4

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.
@@ -1 +1 @@
1
- {"version":3,"file":"translate.service.d.ts","sourceRoot":"","sources":["../../../core/i18n/translate.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,IAAI,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE9E,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAgB7D,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;;AAE3D;;GAEG;AACH,qBAGa,gBAAgB;IAUzB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,OAAO;IACG,OAAO,CAAC,QAAQ;IACtB,OAAO,CAAC,eAAe;IAbrC,MAAM,CAAC,iBAAiB,SAAkB;IAC1C,MAAM,CAAC,WAAW;IAGlB,WAAW,EAAE,GAAG,CAAqC;IACrD,KAAK,EAAE,GAAG,CAA2D;IACrE,OAAO,CAAC,iBAAiB,CAAO;gBAGtB,YAAY,EAAE,mBAAmB,EACjC,EAAE,EAAE,eAAe,EACnB,OAAO,EAAE,cAAc,EACL,QAAQ,EAAE,QAAQ,EACxB,eAAe,EAAE,eAAe;IAQtD;;;;;OAKG;IACG,gBAAgB,CAAC,UAAU,EAAE,MAAM;IAmBnC,WAAW,CAAC,UAAU,KAAA;IAK5B,WAAW,CAAC,IAAI,EAAE,MAAM;IASxB;;OAEG;IACH,sBAAsB;IAYtB;;;OAGG;IACH,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAO7C;;;;OAIG;IACH,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAKvC,kBAAkB,CAAC,IAAI,EAAE,MAAM;IAI/B,YAAY,CAAC,UAAU,EAAE,MAAM;IAqB/B;;;OAGG;IACH,eAAe;IAIf,OAAO,CAAC,eAAe;IAgBvB;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAIxB;;;OAGG;IACH,OAAO,CAAC,YAAY;IAoBpB,OAAO,CAAC,iBAAiB;IAczB;;;;OAIG;IACH,OAAO,CAAC,WAAW;yCArMR,gBAAgB;6CAAhB,gBAAgB;CAgQ5B"}
1
+ {"version":3,"file":"translate.service.d.ts","sourceRoot":"","sources":["../../../core/i18n/translate.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,IAAI,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE9E,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAgB7D,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;;AAE3D;;GAEG;AACH,qBAGa,gBAAgB;IAUzB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,OAAO;IACG,OAAO,CAAC,QAAQ;IACtB,OAAO,CAAC,eAAe;IAbrC,MAAM,CAAC,iBAAiB,SAAkB;IAC1C,MAAM,CAAC,WAAW;IAGlB,WAAW,EAAE,GAAG,CAAqC;IACrD,KAAK,EAAE,GAAG,CAA2D;IACrE,OAAO,CAAC,iBAAiB,CAAO;gBAGtB,YAAY,EAAE,mBAAmB,EACjC,EAAE,EAAE,eAAe,EACnB,OAAO,EAAE,cAAc,EACL,QAAQ,EAAE,QAAQ,EACxB,eAAe,EAAE,eAAe;IAQtD;;;;;OAKG;IACG,gBAAgB,CAAC,UAAU,EAAE,MAAM;IAmBnC,WAAW,CAAC,UAAU,KAAA;IAK5B,WAAW,CAAC,IAAI,EAAE,MAAM;IASxB;;OAEG;IACH,sBAAsB;IAYtB;;;OAGG;IACH,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAO7C;;;;OAIG;IACH,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAKvC,kBAAkB,CAAC,IAAI,EAAE,MAAM;IAI/B,YAAY,CAAC,UAAU,EAAE,MAAM;IAqB/B;;;OAGG;IACH,eAAe;IAIf,OAAO,CAAC,eAAe;IAkBvB;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAIxB;;;OAGG;IACH,OAAO,CAAC,YAAY;IAoBpB,OAAO,CAAC,iBAAiB;IAczB;;;;OAIG;IACH,OAAO,CAAC,WAAW;yCAvMR,gBAAgB;6CAAhB,gBAAgB;CAkQ5B"}
@@ -94,7 +94,7 @@ export class BrandingFormComponent {
94
94
  this.messageBannerService.showBanner();
95
95
  }
96
96
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: BrandingFormComponent, deps: [{ token: i1.FormBuilder }, { token: i2.MessageBannerService }], target: i0.ɵɵFactoryTarget.Component }); }
97
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: BrandingFormComponent, isStandalone: true, selector: "c8y-branding-form", host: { classAttribute: "d-contents" }, ngImport: i0, template: "<div\n class=\"inner-scroll\"\n [formGroup]=\"formGroup\"\n>\n <!-- Title & Favicon-->\n <div class=\"card-block\">\n <div class=\"row\">\n <div class=\"col-xs-12 col-sm-3 col-md-2 p-t-16\">\n <h4 class=\"text-normal text-right text-left-xs m-b-16\">\n {{ 'Title & favicon' | translate }}\n </h4>\n </div>\n <div class=\"col-xs-12 col-sm-9 col-md-10\">\n <div\n class=\"row p-t-16 p-b-16\"\n [formGroupName]=\"'genericApplicationOptions'\"\n >\n <div class=\"col-md-6\">\n <c8y-form-group class=\"m-b-32\">\n <label\n for=\"globalTitle\"\n translate\n >\n Title\n </label>\n <input\n class=\"form-control\"\n id=\"globalTitle\"\n name=\"globalTitle\"\n type=\"text\"\n formControlName=\"globalTitle\"\n />\n <c8y-messages\n [helpMessage]=\"'Title to display in the browser tab' | translate\"\n ></c8y-messages>\n </c8y-form-group>\n </div>\n <div class=\"col-md-6\">\n <c8y-form-group>\n <label translate>Favicon</label>\n <c8y-static-assets-file-picker\n name=\"faviconUrl\"\n [supportedFileExtensions]=\"['ico']\"\n [isCSSURL]=\"false\"\n formControlName=\"faviconUrl\"\n ></c8y-static-assets-file-picker>\n <c8y-messages [helpMessage]=\"'Supported files: *.ico'\"></c8y-messages>\n </c8y-form-group>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"card-block separator-top\">\n <div class=\"col-xs-12 col-sm-3 col-md-2 p-t-16\">\n <h4\n class=\"text-normal text-right text-left-xs m-b-16\"\n translate\n >\n Dark theme\n </h4>\n </div>\n <div class=\"col-xs-12 col-sm-9 col-md-10\">\n <c8y-form-group class=\"m-b-32 p-t-8 m-t-4\">\n <label class=\"c8y-switch\">\n <input\n class=\"form-control\"\n name=\"darkThemeAvailable\"\n type=\"checkbox\"\n formControlName=\"darkThemeAvailable\"\n />\n <span></span>\n <span translate>Enable dark theme support</span>\n </label>\n </c8y-form-group>\n </div>\n </div>\n <!-- Typography -->\n <div class=\"card-block separator-top\">\n <div class=\"row\">\n <div class=\"col-xs-12 col-sm-3 col-md-2 p-t-16\">\n <h4\n class=\"text-normal text-right text-left-xs m-b-16\"\n translate\n >\n Typography\n </h4>\n </div>\n <div class=\"col-xs-12 col-sm-9 col-md-10\">\n <div class=\"row\">\n <div class=\"col-md-6\">\n <fieldset\n class=\"c8y-fieldset p-24\"\n [formGroupName]=\"'baseTypography'\"\n >\n <legend translate>Base typography</legend>\n <c8y-form-group class=\"m-b-32\">\n <label\n for=\"font-url\"\n translate\n >\n Fonts URL\n </label>\n <input\n class=\"form-control\"\n id=\"font-url\"\n placeholder=\"{{\n 'e.g. {{ example }}' | translate : { example: 'https://fonts.googleapis.com/css?family=Roboto:400,500,700' }\n }}\"\n type=\"text\"\n formControlName=\"font-url\"\n />\n <c8y-messages [helpMessage]=\"'The Google fonts URL' | translate\"></c8y-messages>\n </c8y-form-group>\n <c8y-form-group class=\"m-b-32\">\n <label\n title=\"font-family-base\"\n for=\"font-family-base\"\n translate\n >\n Base font stack\n </label>\n <input\n class=\"form-control\"\n id=\"font-family-base\"\n placeholder=\"{{ 'e.g. {{ example }}' | translate : {example: '&quot;Roboto&quot;, Arial, sans-serif'} }}\"\n name=\"font-family-base\"\n type=\"text\"\n formControlName=\"font-family-base\"\n />\n <c8y-messages></c8y-messages>\n </c8y-form-group>\n </fieldset>\n </div>\n <div class=\"col-md-6\">\n <fieldset\n class=\"c8y-fieldset p-24\"\n [formGroupName]=\"'headingsAndNavigatorTypography'\"\n >\n <legend>{{ 'Headings & navigator' | translate }}</legend>\n <c8y-form-group class=\"m-b-32\">\n <label\n title=\"font-family-headings\"\n for=\"font-family-headings\"\n translate\n >\n Headings font stack\n </label>\n <input\n class=\"form-control\"\n id=\"font-family-headings\"\n placeholder=\"{{ 'e.g. {{ example }}' | translate : {example: '&quot;Roboto&quot;, Arial, sans-serif'} }}\"\n type=\"text\"\n formControlName=\"font-family-headings\"\n />\n <c8y-messages\n [helpMessage]=\"\n 'Leave empty to use the same font as the base font stack' | translate\n \"\n ></c8y-messages>\n </c8y-form-group>\n <c8y-form-group class=\"m-b-32\">\n <label\n title=\"navigator-font-family\"\n translate\n >\n Navigator font stack\n </label>\n <div class=\"form-control-static\">\n <label class=\"c8y-radio radio-inline\">\n <input\n name=\"navigator-font-family\"\n type=\"radio\"\n formControlName=\"navigator-font-family\"\n [value]=\"'var(--font-family-base)'\"\n />\n <span></span>\n <span translate>Match base font stack</span>\n </label>\n <label\n class=\"c8y-radio radio-inline\"\n title=\"Radio Two\"\n >\n <input\n name=\"navigator-font-family\"\n type=\"radio\"\n formControlName=\"navigator-font-family\"\n [value]=\"'var(--font-family-headings)'\"\n />\n <span></span>\n <span translate>Match headings font stack</span>\n </label>\n </div>\n </c8y-form-group>\n </fieldset>\n </div>\n </div>\n </div>\n </div>\n </div>\n <!-- Cookie banner -->\n <div class=\"card-block separator-top\">\n <div class=\"row\">\n <div class=\"col-xs-12 col-sm-3 col-md-2 p-t-16\">\n <h4\n class=\"text-normal text-right text-left-xs m-b-16\"\n translate\n >\n Cookie banner\n </h4>\n </div>\n <div class=\"col-xs-12 col-sm-9 col-md-10\">\n <fieldset\n class=\"c8y-fieldset p-24\"\n [formGroupName]=\"'cookieBanner'\"\n >\n <legend translate>Cookie banner</legend>\n <label class=\"c8y-switch\">\n <input\n class=\"form-control\"\n name=\"cookieBannerEnabled\"\n type=\"checkbox\"\n [ngModelOptions]=\"{ standalone: true }\"\n [ngModel]=\"!formGroup.value.cookieBanner.cookieBannerDisabled\"\n (ngModelChange)=\"cockieBannerChange($event)\"\n />\n <span></span>\n <span translate>Enable cookie banner</span>\n </label>\n\n <div\n class=\"collapse\"\n [collapse]=\"formGroup.value.cookieBanner.cookieBannerDisabled\"\n [isAnimated]=\"true\"\n >\n <div\n class=\"row\"\n style=\"min-height: 227px\"\n >\n <ng-container *ngIf=\"formGroup.value.cookieBanner.cookieBannerDisabled !== true\">\n <div class=\"col-md-6\">\n <c8y-form-group class=\"m-b-32\">\n <label\n for=\"cookieBannerTitle\"\n translate\n >\n Title\n </label>\n <input\n class=\"form-control\"\n id=\"cookieBannerTitle\"\n name=\"cookieBannerTitle\"\n type=\"text\"\n formControlName=\"cookieBannerTitle\"\n />\n <c8y-messages></c8y-messages>\n </c8y-form-group>\n <c8y-form-group class=\"m-b-32\">\n <label\n for=\"policyUrl\"\n translate\n >\n Link to privacy policy\n </label>\n <input\n class=\"form-control\"\n id=\"policyUrl\"\n name=\"policyUrl\"\n type=\"text\"\n formControlName=\"policyUrl\"\n />\n <c8y-messages></c8y-messages>\n </c8y-form-group>\n <c8y-form-group class=\"m-b-32\">\n <label\n for=\"policyVersion\"\n translate\n >\n Version of privacy policy\n </label>\n <input\n class=\"form-control\"\n id=\"policyVersion\"\n name=\"policyVersion\"\n type=\"text\"\n formControlName=\"policyVersion\"\n />\n <c8y-messages\n [helpMessage]=\"\n 'Changing the version of the privacy policy invalidates already existing cookie consents.'\n | translate\n \"\n ></c8y-messages>\n </c8y-form-group>\n </div>\n\n <div class=\"col-md-6\">\n <c8y-form-group class=\"m-b-32\">\n <label\n for=\"cookieBannerText\"\n translate\n >\n Text\n </label>\n <textarea\n class=\"form-control\"\n id=\"cookieBannerText\"\n name=\"cookieBannerText\"\n rows=\"8\"\n formControlName=\"cookieBannerText\"\n ></textarea>\n <c8y-messages></c8y-messages>\n </c8y-form-group>\n </div>\n </ng-container>\n </div>\n </div>\n </fieldset>\n </div>\n </div>\n </div>\n <!-- Message banner -->\n <div class=\"card-block separator-top\">\n <div class=\"row\">\n <div class=\"col-xs-12 col-sm-3 col-md-2 p-t-16\">\n <h4\n class=\"text-normal text-right text-left-xs m-b-16\"\n translate\n >\n Message banner\n </h4>\n </div>\n\n <div class=\"col-xs-12 col-sm-9 col-md-10\">\n <fieldset\n class=\"c8y-fieldset p-24\"\n [formGroupName]=\"'messageBanner'\"\n >\n <legend translate>Message banner</legend>\n\n <label class=\"c8y-switch\">\n <input\n class=\"form-control\"\n name=\"messageBannerEnabled\"\n type=\"checkbox\"\n formControlName=\"messageBannerEnabled\"\n />\n <span></span>\n <span translate>Enable message banner</span>\n </label>\n <div\n class=\"collapse\"\n [collapse]=\"!formGroup.value.messageBanner.messageBannerEnabled\"\n [isAnimated]=\"true\"\n >\n <div class=\"d-flex a-i-center gap-8 p-t-16 p-b-16\">\n <fieldset class=\"c8y-fieldset p-16\">\n <legend>{{ 'Message type' | translate }}</legend>\n <label\n class=\"c8y-radio radio-inline\"\n title=\"{{ 'Info' | translate }}\"\n >\n <input\n type=\"radio\"\n value=\"info\"\n formControlName=\"messageBannerType\"\n />\n <span></span>\n <span class=\"d-flex a-i-center\">\n <i\n class=\"text-info icon-16 m-r-4\"\n c8yIcon=\"info-circle\"\n ></i>\n Info\n </span>\n </label>\n <label\n class=\"c8y-radio radio-inline\"\n title=\"{{ 'Warning' | translate }}\"\n >\n <input\n type=\"radio\"\n value=\"warning\"\n formControlName=\"messageBannerType\"\n />\n <span></span>\n <span class=\"d-flex a-i-center\">\n <i\n class=\"text-warning icon-16 m-r-4\"\n c8yIcon=\"warning\"\n ></i>\n {{ 'Warning' | translate }}\n </span>\n </label>\n <label\n class=\"c8y-radio radio-inline\"\n title=\"{{ 'Danger' | translate }}\"\n >\n <input\n type=\"radio\"\n value=\"danger\"\n formControlName=\"messageBannerType\"\n />\n <span></span>\n <span class=\"d-flex a-i-center\">\n <i\n class=\"text-danger icon-16 m-r-4\"\n c8yIcon=\"exclamation-circle\"\n ></i>\n {{ 'Danger' | translate }}\n </span>\n </label>\n <label\n class=\"c8y-radio radio-inline\"\n title=\"{{ 'Success' | translate }}\"\n >\n <input\n type=\"radio\"\n value=\"success\"\n formControlName=\"messageBannerType\"\n />\n <span></span>\n <span class=\"d-flex a-i-center\">\n <i\n class=\"text-success icon-16 m-r-4\"\n c8yIcon=\"check-circle\"\n ></i>\n {{ 'Success' | translate }}\n </span>\n </label>\n <label\n class=\"c8y-radio radio-inline\"\n title=\"{{ 'System' | translate }}\"\n >\n <input\n type=\"radio\"\n value=\"system\"\n formControlName=\"messageBannerType\"\n />\n <span></span>\n <span>\n <i\n class=\"text-primary icon-16 m-r4\"\n c8yIcon=\"wrench\"\n ></i>\n {{ 'System' | translate }}\n </span>\n </label>\n </fieldset>\n </div>\n\n <c8y-form-group\n class=\"m-b-32 p-b-32\"\n [style]=\"{ height: '300px' }\"\n *ngIf=\"formGroup.value.messageBanner.messageBannerEnabled\"\n >\n <label\n for=\"messageBannerContent\"\n translate\n >\n Message content\n </label>\n <c8y-editor\n class=\"flex-grow form-control\"\n style=\"height: 100%\"\n formControlName=\"messageBannerContent\"\n monacoEditorMarkerValidator\n ></c8y-editor>\n <c8y-messages\n [helpMessage]=\"messageBannerHelp | translate: messageBannerHelpParams\"\n ></c8y-messages>\n <c8y-messages></c8y-messages>\n </c8y-form-group>\n\n <button\n class=\"btn btn-default\"\n type=\"button\"\n (click)=\"previewBanner()\"\n >\n <i\n class=\"m-r-4\"\n c8yIcon=\"eye\"\n ></i>\n <span translate>Preview banner</span>\n </button>\n </div>\n </fieldset>\n </div>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "ngmodule", type: CoreModule }, { kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }, { kind: "directive", type: i2.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "component", type: i2.MessagesComponent, selector: "c8y-messages", inputs: ["show", "defaults", "helpMessage"] }, { kind: "directive", type: i2.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: CollapseModule }, { kind: "directive", type: i4.CollapseDirective, selector: "[collapse]", inputs: ["display", "isAnimated", "collapse"], outputs: ["collapsed", "collapses", "expanded", "expands"], exportAs: ["bs-collapse"] }, { kind: "component", type: StaticAssetsFilePickerComponent, selector: "c8y-static-assets-file-picker", inputs: ["isCSSURL", "staticAssetType", "supportedFileExtensions", "layout", "size"] }, { kind: "component", type: EditorComponent, selector: "c8y-editor", inputs: ["editorOptions"], outputs: ["editorInit"] }] }); }
97
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: BrandingFormComponent, isStandalone: true, selector: "c8y-branding-form", host: { classAttribute: "d-contents" }, ngImport: i0, template: "<div\n class=\"inner-scroll\"\n [formGroup]=\"formGroup\"\n>\n <!-- Title & Favicon-->\n <div class=\"card-block\">\n <div class=\"row\">\n <div class=\"col-xs-12 col-sm-3 col-md-2 p-t-16\">\n <h4 class=\"text-normal text-right text-left-xs m-b-16\">\n {{ 'Title & favicon' | translate }}\n </h4>\n </div>\n <div class=\"col-xs-12 col-sm-9 col-md-10\">\n <div\n class=\"row p-t-16 p-b-16\"\n [formGroupName]=\"'genericApplicationOptions'\"\n >\n <div class=\"col-md-6\">\n <c8y-form-group class=\"m-b-32\">\n <label\n for=\"globalTitle\"\n translate\n >\n Title\n </label>\n <input\n class=\"form-control\"\n id=\"globalTitle\"\n name=\"globalTitle\"\n type=\"text\"\n formControlName=\"globalTitle\"\n />\n <c8y-messages\n [helpMessage]=\"'Title to display in the browser tab' | translate\"\n ></c8y-messages>\n </c8y-form-group>\n </div>\n <div class=\"col-md-6\">\n <c8y-form-group>\n <label translate>Favicon</label>\n <c8y-static-assets-file-picker\n name=\"faviconUrl\"\n [supportedFileExtensions]=\"['ico']\"\n [isCSSURL]=\"false\"\n formControlName=\"faviconUrl\"\n ></c8y-static-assets-file-picker>\n <c8y-messages [helpMessage]=\"'Supported files: *.ico'\"></c8y-messages>\n </c8y-form-group>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"card-block separator-top\">\n <div class=\"col-xs-12 col-sm-3 col-md-2 p-t-16\">\n <h4\n class=\"text-normal text-right text-left-xs m-b-16\"\n translate\n >\n Dark theme\n </h4>\n </div>\n <div class=\"col-xs-12 col-sm-9 col-md-10\">\n <c8y-form-group class=\"m-b-32 p-t-8 m-t-4\">\n <label class=\"c8y-switch\">\n <input\n class=\"form-control\"\n name=\"darkThemeAvailable\"\n type=\"checkbox\"\n formControlName=\"darkThemeAvailable\"\n />\n <span></span>\n <span translate>Enable dark theme support</span>\n </label>\n </c8y-form-group>\n </div>\n </div>\n <!-- Typography -->\n <div class=\"card-block separator-top\">\n <div class=\"row\">\n <div class=\"col-xs-12 col-sm-3 col-md-2 p-t-16\">\n <h4\n class=\"text-normal text-right text-left-xs m-b-16\"\n translate\n >\n Typography\n </h4>\n </div>\n <div class=\"col-xs-12 col-sm-9 col-md-10\">\n <div class=\"row\">\n <div class=\"col-md-6\">\n <fieldset\n class=\"c8y-fieldset p-24\"\n [formGroupName]=\"'baseTypography'\"\n >\n <legend translate>Base typography</legend>\n <c8y-form-group class=\"m-b-32\">\n <label\n for=\"font-url\"\n translate\n >\n Fonts URL\n </label>\n <input\n class=\"form-control\"\n id=\"font-url\"\n placeholder=\"{{\n 'e.g. {{ example }}' | translate : { example: 'https://fonts.googleapis.com/css?family=Roboto:400,500,700' }\n }}\"\n type=\"text\"\n formControlName=\"font-url\"\n />\n <c8y-messages [helpMessage]=\"'The Google fonts URL' | translate\"></c8y-messages>\n </c8y-form-group>\n <c8y-form-group class=\"m-b-32\">\n <label\n title=\"font-family-base\"\n for=\"font-family-base\"\n translate\n >\n Base font stack\n </label>\n <input\n class=\"form-control\"\n id=\"font-family-base\"\n placeholder=\"{{ 'e.g. {{ example }}' | translate : {example: '&quot;Roboto&quot;, Arial, sans-serif'} }}\"\n name=\"font-family-base\"\n type=\"text\"\n formControlName=\"font-family-base\"\n />\n <c8y-messages></c8y-messages>\n </c8y-form-group>\n </fieldset>\n </div>\n <div class=\"col-md-6\">\n <fieldset\n class=\"c8y-fieldset p-24\"\n [formGroupName]=\"'headingsAndNavigatorTypography'\"\n >\n <legend>{{ 'Headings & navigator' | translate }}</legend>\n <c8y-form-group class=\"m-b-32\">\n <label\n title=\"font-family-headings\"\n for=\"font-family-headings\"\n translate\n >\n Headings font stack\n </label>\n <input\n class=\"form-control\"\n id=\"font-family-headings\"\n placeholder=\"{{ 'e.g. {{ example }}' | translate : {example: '&quot;Roboto&quot;, Arial, sans-serif'} }}\"\n type=\"text\"\n formControlName=\"font-family-headings\"\n />\n <c8y-messages\n [helpMessage]=\"\n 'Leave empty to use the same font as the base font stack' | translate\n \"\n ></c8y-messages>\n </c8y-form-group>\n <c8y-form-group class=\"m-b-32\">\n <label\n title=\"navigator-font-family\"\n translate\n >\n Navigator font stack\n </label>\n <div class=\"form-control-static\">\n <label class=\"c8y-radio radio-inline\">\n <input\n name=\"navigator-font-family\"\n type=\"radio\"\n formControlName=\"navigator-font-family\"\n [value]=\"'var(--font-family-base)'\"\n />\n <span></span>\n <span translate>Match base font stack</span>\n </label>\n <label\n class=\"c8y-radio radio-inline\"\n title=\"Radio Two\"\n >\n <input\n name=\"navigator-font-family\"\n type=\"radio\"\n formControlName=\"navigator-font-family\"\n [value]=\"'var(--font-family-headings)'\"\n />\n <span></span>\n <span translate>Match headings font stack</span>\n </label>\n </div>\n </c8y-form-group>\n </fieldset>\n </div>\n </div>\n </div>\n </div>\n </div>\n <!-- Cookie banner -->\n <div class=\"card-block separator-top\">\n <div class=\"row\">\n <div class=\"col-xs-12 col-sm-3 col-md-2 p-t-16\">\n <h4\n class=\"text-normal text-right text-left-xs m-b-16\"\n translate\n >\n Cookie banner\n </h4>\n </div>\n <div class=\"col-xs-12 col-sm-9 col-md-10\">\n <fieldset\n class=\"c8y-fieldset p-24\"\n [formGroupName]=\"'cookieBanner'\"\n >\n <legend translate>Cookie banner</legend>\n <label class=\"c8y-switch\">\n <input\n class=\"form-control\"\n name=\"cookieBannerEnabled\"\n type=\"checkbox\"\n [ngModelOptions]=\"{ standalone: true }\"\n [ngModel]=\"!formGroup.value.cookieBanner.cookieBannerDisabled\"\n (ngModelChange)=\"cockieBannerChange($event)\"\n />\n <span></span>\n <span translate>Enable cookie banner</span>\n </label>\n\n <div\n class=\"collapse\"\n [collapse]=\"formGroup.value.cookieBanner.cookieBannerDisabled\"\n [isAnimated]=\"true\"\n >\n <div\n class=\"row\"\n style=\"min-height: 227px\"\n >\n <ng-container *ngIf=\"formGroup.value.cookieBanner.cookieBannerDisabled !== true\">\n <div class=\"col-md-6\">\n <c8y-form-group class=\"m-b-32\">\n <label\n for=\"cookieBannerTitle\"\n translate\n >\n Title\n </label>\n <input\n class=\"form-control\"\n id=\"cookieBannerTitle\"\n name=\"cookieBannerTitle\"\n type=\"text\"\n formControlName=\"cookieBannerTitle\"\n />\n <c8y-messages></c8y-messages>\n </c8y-form-group>\n <c8y-form-group class=\"m-b-32\">\n <label\n for=\"policyUrl\"\n translate\n >\n Link to privacy policy\n </label>\n <input\n class=\"form-control\"\n id=\"policyUrl\"\n name=\"policyUrl\"\n type=\"text\"\n formControlName=\"policyUrl\"\n />\n <c8y-messages></c8y-messages>\n </c8y-form-group>\n <c8y-form-group class=\"m-b-32\">\n <label\n for=\"policyVersion\"\n translate\n >\n Version of privacy policy\n </label>\n <input\n class=\"form-control\"\n id=\"policyVersion\"\n name=\"policyVersion\"\n type=\"text\"\n formControlName=\"policyVersion\"\n />\n <c8y-messages\n [helpMessage]=\"\n 'Changing the version of the privacy policy invalidates already existing cookie consents.'\n | translate\n \"\n ></c8y-messages>\n </c8y-form-group>\n </div>\n\n <div class=\"col-md-6\">\n <c8y-form-group class=\"m-b-32\">\n <label\n for=\"cookieBannerText\"\n translate\n >\n Text\n </label>\n <textarea\n class=\"form-control\"\n id=\"cookieBannerText\"\n name=\"cookieBannerText\"\n rows=\"8\"\n formControlName=\"cookieBannerText\"\n ></textarea>\n <c8y-messages></c8y-messages>\n </c8y-form-group>\n </div>\n </ng-container>\n </div>\n </div>\n </fieldset>\n </div>\n </div>\n </div>\n <!-- Message banner -->\n <div class=\"card-block separator-top\">\n <div class=\"row\">\n <div class=\"col-xs-12 col-sm-3 col-md-2 p-t-16\">\n <h4\n class=\"text-normal text-right text-left-xs m-b-16\"\n translate\n >\n Message banner\n </h4>\n </div>\n\n <div class=\"col-xs-12 col-sm-9 col-md-10\">\n <fieldset\n class=\"c8y-fieldset p-24\"\n [formGroupName]=\"'messageBanner'\"\n >\n <legend translate>Message banner</legend>\n\n <label class=\"c8y-switch\">\n <input\n class=\"form-control\"\n name=\"messageBannerEnabled\"\n type=\"checkbox\"\n formControlName=\"messageBannerEnabled\"\n />\n <span></span>\n <span translate>Enable message banner</span>\n </label>\n <div\n class=\"collapse\"\n [collapse]=\"!formGroup.value.messageBanner.messageBannerEnabled\"\n [isAnimated]=\"true\"\n >\n <div class=\"d-flex a-i-center gap-8 p-t-16 p-b-16\">\n <fieldset class=\"c8y-fieldset p-16\">\n <legend>{{ 'Message type' | translate }}</legend>\n <label\n class=\"c8y-radio radio-inline\"\n title=\"{{ 'Info' | translate }}\"\n >\n <input\n type=\"radio\"\n value=\"info\"\n formControlName=\"messageBannerType\"\n />\n <span></span>\n <span class=\"d-flex a-i-center\">\n <i\n class=\"text-info icon-16 m-r-4\"\n c8yIcon=\"info-circle\"\n ></i>\n Info\n </span>\n </label>\n <label\n class=\"c8y-radio radio-inline\"\n title=\"{{ 'Warning' | translate }}\"\n >\n <input\n type=\"radio\"\n value=\"warning\"\n formControlName=\"messageBannerType\"\n />\n <span></span>\n <span class=\"d-flex a-i-center\">\n <i\n class=\"text-warning icon-16 m-r-4\"\n c8yIcon=\"warning\"\n ></i>\n {{ 'Warning' | translate }}\n </span>\n </label>\n <label\n class=\"c8y-radio radio-inline\"\n title=\"{{ 'Danger' | translate }}\"\n >\n <input\n type=\"radio\"\n value=\"danger\"\n formControlName=\"messageBannerType\"\n />\n <span></span>\n <span class=\"d-flex a-i-center\">\n <i\n class=\"text-danger icon-16 m-r-4\"\n c8yIcon=\"exclamation-circle\"\n ></i>\n {{ 'Danger' | translate }}\n </span>\n </label>\n <label\n class=\"c8y-radio radio-inline\"\n title=\"{{ 'Success' | translate }}\"\n >\n <input\n type=\"radio\"\n value=\"success\"\n formControlName=\"messageBannerType\"\n />\n <span></span>\n <span class=\"d-flex a-i-center\">\n <i\n class=\"text-success icon-16 m-r-4\"\n c8yIcon=\"check-circle\"\n ></i>\n {{ 'Success' | translate }}\n </span>\n </label>\n <label\n class=\"c8y-radio radio-inline\"\n title=\"{{ 'System' | translate }}\"\n >\n <input\n type=\"radio\"\n value=\"system\"\n formControlName=\"messageBannerType\"\n />\n <span></span>\n <span>\n <i\n class=\"text-primary icon-16 m-r4\"\n c8yIcon=\"wrench\"\n ></i>\n {{ 'System' | translate }}\n </span>\n </label>\n </fieldset>\n </div>\n\n <c8y-form-group\n class=\"m-b-32 p-b-32\"\n [style]=\"{ height: '300px' }\"\n *ngIf=\"formGroup.value.messageBanner.messageBannerEnabled\"\n >\n <label\n for=\"messageBannerContent\"\n translate\n >\n Message content\n </label>\n <c8y-editor\n class=\"flex-grow form-control\"\n style=\"height: 100%\"\n formControlName=\"messageBannerContent\"\n [editorOptions]=\"{language: 'markdown'}\"\n monacoEditorMarkerValidator\n ></c8y-editor>\n <c8y-messages\n [helpMessage]=\"messageBannerHelp | translate: messageBannerHelpParams\"\n ></c8y-messages>\n <c8y-messages></c8y-messages>\n </c8y-form-group>\n\n <button\n class=\"btn btn-default\"\n type=\"button\"\n (click)=\"previewBanner()\"\n >\n <i\n class=\"m-r-4\"\n c8yIcon=\"eye\"\n ></i>\n <span translate>Preview banner</span>\n </button>\n </div>\n </fieldset>\n </div>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "ngmodule", type: CoreModule }, { kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }, { kind: "directive", type: i2.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "component", type: i2.MessagesComponent, selector: "c8y-messages", inputs: ["show", "defaults", "helpMessage"] }, { kind: "directive", type: i2.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: CollapseModule }, { kind: "directive", type: i4.CollapseDirective, selector: "[collapse]", inputs: ["display", "isAnimated", "collapse"], outputs: ["collapsed", "collapses", "expanded", "expands"], exportAs: ["bs-collapse"] }, { kind: "component", type: StaticAssetsFilePickerComponent, selector: "c8y-static-assets-file-picker", inputs: ["isCSSURL", "staticAssetType", "supportedFileExtensions", "layout", "size"] }, { kind: "component", type: EditorComponent, selector: "c8y-editor", inputs: ["editorOptions"], outputs: ["editorInit"] }] }); }
98
98
  }
99
99
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: BrandingFormComponent, decorators: [{
100
100
  type: Component,
@@ -104,6 +104,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
104
104
  CollapseModule,
105
105
  StaticAssetsFilePickerComponent,
106
106
  EditorComponent
107
- ], template: "<div\n class=\"inner-scroll\"\n [formGroup]=\"formGroup\"\n>\n <!-- Title & Favicon-->\n <div class=\"card-block\">\n <div class=\"row\">\n <div class=\"col-xs-12 col-sm-3 col-md-2 p-t-16\">\n <h4 class=\"text-normal text-right text-left-xs m-b-16\">\n {{ 'Title & favicon' | translate }}\n </h4>\n </div>\n <div class=\"col-xs-12 col-sm-9 col-md-10\">\n <div\n class=\"row p-t-16 p-b-16\"\n [formGroupName]=\"'genericApplicationOptions'\"\n >\n <div class=\"col-md-6\">\n <c8y-form-group class=\"m-b-32\">\n <label\n for=\"globalTitle\"\n translate\n >\n Title\n </label>\n <input\n class=\"form-control\"\n id=\"globalTitle\"\n name=\"globalTitle\"\n type=\"text\"\n formControlName=\"globalTitle\"\n />\n <c8y-messages\n [helpMessage]=\"'Title to display in the browser tab' | translate\"\n ></c8y-messages>\n </c8y-form-group>\n </div>\n <div class=\"col-md-6\">\n <c8y-form-group>\n <label translate>Favicon</label>\n <c8y-static-assets-file-picker\n name=\"faviconUrl\"\n [supportedFileExtensions]=\"['ico']\"\n [isCSSURL]=\"false\"\n formControlName=\"faviconUrl\"\n ></c8y-static-assets-file-picker>\n <c8y-messages [helpMessage]=\"'Supported files: *.ico'\"></c8y-messages>\n </c8y-form-group>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"card-block separator-top\">\n <div class=\"col-xs-12 col-sm-3 col-md-2 p-t-16\">\n <h4\n class=\"text-normal text-right text-left-xs m-b-16\"\n translate\n >\n Dark theme\n </h4>\n </div>\n <div class=\"col-xs-12 col-sm-9 col-md-10\">\n <c8y-form-group class=\"m-b-32 p-t-8 m-t-4\">\n <label class=\"c8y-switch\">\n <input\n class=\"form-control\"\n name=\"darkThemeAvailable\"\n type=\"checkbox\"\n formControlName=\"darkThemeAvailable\"\n />\n <span></span>\n <span translate>Enable dark theme support</span>\n </label>\n </c8y-form-group>\n </div>\n </div>\n <!-- Typography -->\n <div class=\"card-block separator-top\">\n <div class=\"row\">\n <div class=\"col-xs-12 col-sm-3 col-md-2 p-t-16\">\n <h4\n class=\"text-normal text-right text-left-xs m-b-16\"\n translate\n >\n Typography\n </h4>\n </div>\n <div class=\"col-xs-12 col-sm-9 col-md-10\">\n <div class=\"row\">\n <div class=\"col-md-6\">\n <fieldset\n class=\"c8y-fieldset p-24\"\n [formGroupName]=\"'baseTypography'\"\n >\n <legend translate>Base typography</legend>\n <c8y-form-group class=\"m-b-32\">\n <label\n for=\"font-url\"\n translate\n >\n Fonts URL\n </label>\n <input\n class=\"form-control\"\n id=\"font-url\"\n placeholder=\"{{\n 'e.g. {{ example }}' | translate : { example: 'https://fonts.googleapis.com/css?family=Roboto:400,500,700' }\n }}\"\n type=\"text\"\n formControlName=\"font-url\"\n />\n <c8y-messages [helpMessage]=\"'The Google fonts URL' | translate\"></c8y-messages>\n </c8y-form-group>\n <c8y-form-group class=\"m-b-32\">\n <label\n title=\"font-family-base\"\n for=\"font-family-base\"\n translate\n >\n Base font stack\n </label>\n <input\n class=\"form-control\"\n id=\"font-family-base\"\n placeholder=\"{{ 'e.g. {{ example }}' | translate : {example: '&quot;Roboto&quot;, Arial, sans-serif'} }}\"\n name=\"font-family-base\"\n type=\"text\"\n formControlName=\"font-family-base\"\n />\n <c8y-messages></c8y-messages>\n </c8y-form-group>\n </fieldset>\n </div>\n <div class=\"col-md-6\">\n <fieldset\n class=\"c8y-fieldset p-24\"\n [formGroupName]=\"'headingsAndNavigatorTypography'\"\n >\n <legend>{{ 'Headings & navigator' | translate }}</legend>\n <c8y-form-group class=\"m-b-32\">\n <label\n title=\"font-family-headings\"\n for=\"font-family-headings\"\n translate\n >\n Headings font stack\n </label>\n <input\n class=\"form-control\"\n id=\"font-family-headings\"\n placeholder=\"{{ 'e.g. {{ example }}' | translate : {example: '&quot;Roboto&quot;, Arial, sans-serif'} }}\"\n type=\"text\"\n formControlName=\"font-family-headings\"\n />\n <c8y-messages\n [helpMessage]=\"\n 'Leave empty to use the same font as the base font stack' | translate\n \"\n ></c8y-messages>\n </c8y-form-group>\n <c8y-form-group class=\"m-b-32\">\n <label\n title=\"navigator-font-family\"\n translate\n >\n Navigator font stack\n </label>\n <div class=\"form-control-static\">\n <label class=\"c8y-radio radio-inline\">\n <input\n name=\"navigator-font-family\"\n type=\"radio\"\n formControlName=\"navigator-font-family\"\n [value]=\"'var(--font-family-base)'\"\n />\n <span></span>\n <span translate>Match base font stack</span>\n </label>\n <label\n class=\"c8y-radio radio-inline\"\n title=\"Radio Two\"\n >\n <input\n name=\"navigator-font-family\"\n type=\"radio\"\n formControlName=\"navigator-font-family\"\n [value]=\"'var(--font-family-headings)'\"\n />\n <span></span>\n <span translate>Match headings font stack</span>\n </label>\n </div>\n </c8y-form-group>\n </fieldset>\n </div>\n </div>\n </div>\n </div>\n </div>\n <!-- Cookie banner -->\n <div class=\"card-block separator-top\">\n <div class=\"row\">\n <div class=\"col-xs-12 col-sm-3 col-md-2 p-t-16\">\n <h4\n class=\"text-normal text-right text-left-xs m-b-16\"\n translate\n >\n Cookie banner\n </h4>\n </div>\n <div class=\"col-xs-12 col-sm-9 col-md-10\">\n <fieldset\n class=\"c8y-fieldset p-24\"\n [formGroupName]=\"'cookieBanner'\"\n >\n <legend translate>Cookie banner</legend>\n <label class=\"c8y-switch\">\n <input\n class=\"form-control\"\n name=\"cookieBannerEnabled\"\n type=\"checkbox\"\n [ngModelOptions]=\"{ standalone: true }\"\n [ngModel]=\"!formGroup.value.cookieBanner.cookieBannerDisabled\"\n (ngModelChange)=\"cockieBannerChange($event)\"\n />\n <span></span>\n <span translate>Enable cookie banner</span>\n </label>\n\n <div\n class=\"collapse\"\n [collapse]=\"formGroup.value.cookieBanner.cookieBannerDisabled\"\n [isAnimated]=\"true\"\n >\n <div\n class=\"row\"\n style=\"min-height: 227px\"\n >\n <ng-container *ngIf=\"formGroup.value.cookieBanner.cookieBannerDisabled !== true\">\n <div class=\"col-md-6\">\n <c8y-form-group class=\"m-b-32\">\n <label\n for=\"cookieBannerTitle\"\n translate\n >\n Title\n </label>\n <input\n class=\"form-control\"\n id=\"cookieBannerTitle\"\n name=\"cookieBannerTitle\"\n type=\"text\"\n formControlName=\"cookieBannerTitle\"\n />\n <c8y-messages></c8y-messages>\n </c8y-form-group>\n <c8y-form-group class=\"m-b-32\">\n <label\n for=\"policyUrl\"\n translate\n >\n Link to privacy policy\n </label>\n <input\n class=\"form-control\"\n id=\"policyUrl\"\n name=\"policyUrl\"\n type=\"text\"\n formControlName=\"policyUrl\"\n />\n <c8y-messages></c8y-messages>\n </c8y-form-group>\n <c8y-form-group class=\"m-b-32\">\n <label\n for=\"policyVersion\"\n translate\n >\n Version of privacy policy\n </label>\n <input\n class=\"form-control\"\n id=\"policyVersion\"\n name=\"policyVersion\"\n type=\"text\"\n formControlName=\"policyVersion\"\n />\n <c8y-messages\n [helpMessage]=\"\n 'Changing the version of the privacy policy invalidates already existing cookie consents.'\n | translate\n \"\n ></c8y-messages>\n </c8y-form-group>\n </div>\n\n <div class=\"col-md-6\">\n <c8y-form-group class=\"m-b-32\">\n <label\n for=\"cookieBannerText\"\n translate\n >\n Text\n </label>\n <textarea\n class=\"form-control\"\n id=\"cookieBannerText\"\n name=\"cookieBannerText\"\n rows=\"8\"\n formControlName=\"cookieBannerText\"\n ></textarea>\n <c8y-messages></c8y-messages>\n </c8y-form-group>\n </div>\n </ng-container>\n </div>\n </div>\n </fieldset>\n </div>\n </div>\n </div>\n <!-- Message banner -->\n <div class=\"card-block separator-top\">\n <div class=\"row\">\n <div class=\"col-xs-12 col-sm-3 col-md-2 p-t-16\">\n <h4\n class=\"text-normal text-right text-left-xs m-b-16\"\n translate\n >\n Message banner\n </h4>\n </div>\n\n <div class=\"col-xs-12 col-sm-9 col-md-10\">\n <fieldset\n class=\"c8y-fieldset p-24\"\n [formGroupName]=\"'messageBanner'\"\n >\n <legend translate>Message banner</legend>\n\n <label class=\"c8y-switch\">\n <input\n class=\"form-control\"\n name=\"messageBannerEnabled\"\n type=\"checkbox\"\n formControlName=\"messageBannerEnabled\"\n />\n <span></span>\n <span translate>Enable message banner</span>\n </label>\n <div\n class=\"collapse\"\n [collapse]=\"!formGroup.value.messageBanner.messageBannerEnabled\"\n [isAnimated]=\"true\"\n >\n <div class=\"d-flex a-i-center gap-8 p-t-16 p-b-16\">\n <fieldset class=\"c8y-fieldset p-16\">\n <legend>{{ 'Message type' | translate }}</legend>\n <label\n class=\"c8y-radio radio-inline\"\n title=\"{{ 'Info' | translate }}\"\n >\n <input\n type=\"radio\"\n value=\"info\"\n formControlName=\"messageBannerType\"\n />\n <span></span>\n <span class=\"d-flex a-i-center\">\n <i\n class=\"text-info icon-16 m-r-4\"\n c8yIcon=\"info-circle\"\n ></i>\n Info\n </span>\n </label>\n <label\n class=\"c8y-radio radio-inline\"\n title=\"{{ 'Warning' | translate }}\"\n >\n <input\n type=\"radio\"\n value=\"warning\"\n formControlName=\"messageBannerType\"\n />\n <span></span>\n <span class=\"d-flex a-i-center\">\n <i\n class=\"text-warning icon-16 m-r-4\"\n c8yIcon=\"warning\"\n ></i>\n {{ 'Warning' | translate }}\n </span>\n </label>\n <label\n class=\"c8y-radio radio-inline\"\n title=\"{{ 'Danger' | translate }}\"\n >\n <input\n type=\"radio\"\n value=\"danger\"\n formControlName=\"messageBannerType\"\n />\n <span></span>\n <span class=\"d-flex a-i-center\">\n <i\n class=\"text-danger icon-16 m-r-4\"\n c8yIcon=\"exclamation-circle\"\n ></i>\n {{ 'Danger' | translate }}\n </span>\n </label>\n <label\n class=\"c8y-radio radio-inline\"\n title=\"{{ 'Success' | translate }}\"\n >\n <input\n type=\"radio\"\n value=\"success\"\n formControlName=\"messageBannerType\"\n />\n <span></span>\n <span class=\"d-flex a-i-center\">\n <i\n class=\"text-success icon-16 m-r-4\"\n c8yIcon=\"check-circle\"\n ></i>\n {{ 'Success' | translate }}\n </span>\n </label>\n <label\n class=\"c8y-radio radio-inline\"\n title=\"{{ 'System' | translate }}\"\n >\n <input\n type=\"radio\"\n value=\"system\"\n formControlName=\"messageBannerType\"\n />\n <span></span>\n <span>\n <i\n class=\"text-primary icon-16 m-r4\"\n c8yIcon=\"wrench\"\n ></i>\n {{ 'System' | translate }}\n </span>\n </label>\n </fieldset>\n </div>\n\n <c8y-form-group\n class=\"m-b-32 p-b-32\"\n [style]=\"{ height: '300px' }\"\n *ngIf=\"formGroup.value.messageBanner.messageBannerEnabled\"\n >\n <label\n for=\"messageBannerContent\"\n translate\n >\n Message content\n </label>\n <c8y-editor\n class=\"flex-grow form-control\"\n style=\"height: 100%\"\n formControlName=\"messageBannerContent\"\n monacoEditorMarkerValidator\n ></c8y-editor>\n <c8y-messages\n [helpMessage]=\"messageBannerHelp | translate: messageBannerHelpParams\"\n ></c8y-messages>\n <c8y-messages></c8y-messages>\n </c8y-form-group>\n\n <button\n class=\"btn btn-default\"\n type=\"button\"\n (click)=\"previewBanner()\"\n >\n <i\n class=\"m-r-4\"\n c8yIcon=\"eye\"\n ></i>\n <span translate>Preview banner</span>\n </button>\n </div>\n </fieldset>\n </div>\n </div>\n </div>\n</div>\n" }]
107
+ ], template: "<div\n class=\"inner-scroll\"\n [formGroup]=\"formGroup\"\n>\n <!-- Title & Favicon-->\n <div class=\"card-block\">\n <div class=\"row\">\n <div class=\"col-xs-12 col-sm-3 col-md-2 p-t-16\">\n <h4 class=\"text-normal text-right text-left-xs m-b-16\">\n {{ 'Title & favicon' | translate }}\n </h4>\n </div>\n <div class=\"col-xs-12 col-sm-9 col-md-10\">\n <div\n class=\"row p-t-16 p-b-16\"\n [formGroupName]=\"'genericApplicationOptions'\"\n >\n <div class=\"col-md-6\">\n <c8y-form-group class=\"m-b-32\">\n <label\n for=\"globalTitle\"\n translate\n >\n Title\n </label>\n <input\n class=\"form-control\"\n id=\"globalTitle\"\n name=\"globalTitle\"\n type=\"text\"\n formControlName=\"globalTitle\"\n />\n <c8y-messages\n [helpMessage]=\"'Title to display in the browser tab' | translate\"\n ></c8y-messages>\n </c8y-form-group>\n </div>\n <div class=\"col-md-6\">\n <c8y-form-group>\n <label translate>Favicon</label>\n <c8y-static-assets-file-picker\n name=\"faviconUrl\"\n [supportedFileExtensions]=\"['ico']\"\n [isCSSURL]=\"false\"\n formControlName=\"faviconUrl\"\n ></c8y-static-assets-file-picker>\n <c8y-messages [helpMessage]=\"'Supported files: *.ico'\"></c8y-messages>\n </c8y-form-group>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"card-block separator-top\">\n <div class=\"col-xs-12 col-sm-3 col-md-2 p-t-16\">\n <h4\n class=\"text-normal text-right text-left-xs m-b-16\"\n translate\n >\n Dark theme\n </h4>\n </div>\n <div class=\"col-xs-12 col-sm-9 col-md-10\">\n <c8y-form-group class=\"m-b-32 p-t-8 m-t-4\">\n <label class=\"c8y-switch\">\n <input\n class=\"form-control\"\n name=\"darkThemeAvailable\"\n type=\"checkbox\"\n formControlName=\"darkThemeAvailable\"\n />\n <span></span>\n <span translate>Enable dark theme support</span>\n </label>\n </c8y-form-group>\n </div>\n </div>\n <!-- Typography -->\n <div class=\"card-block separator-top\">\n <div class=\"row\">\n <div class=\"col-xs-12 col-sm-3 col-md-2 p-t-16\">\n <h4\n class=\"text-normal text-right text-left-xs m-b-16\"\n translate\n >\n Typography\n </h4>\n </div>\n <div class=\"col-xs-12 col-sm-9 col-md-10\">\n <div class=\"row\">\n <div class=\"col-md-6\">\n <fieldset\n class=\"c8y-fieldset p-24\"\n [formGroupName]=\"'baseTypography'\"\n >\n <legend translate>Base typography</legend>\n <c8y-form-group class=\"m-b-32\">\n <label\n for=\"font-url\"\n translate\n >\n Fonts URL\n </label>\n <input\n class=\"form-control\"\n id=\"font-url\"\n placeholder=\"{{\n 'e.g. {{ example }}' | translate : { example: 'https://fonts.googleapis.com/css?family=Roboto:400,500,700' }\n }}\"\n type=\"text\"\n formControlName=\"font-url\"\n />\n <c8y-messages [helpMessage]=\"'The Google fonts URL' | translate\"></c8y-messages>\n </c8y-form-group>\n <c8y-form-group class=\"m-b-32\">\n <label\n title=\"font-family-base\"\n for=\"font-family-base\"\n translate\n >\n Base font stack\n </label>\n <input\n class=\"form-control\"\n id=\"font-family-base\"\n placeholder=\"{{ 'e.g. {{ example }}' | translate : {example: '&quot;Roboto&quot;, Arial, sans-serif'} }}\"\n name=\"font-family-base\"\n type=\"text\"\n formControlName=\"font-family-base\"\n />\n <c8y-messages></c8y-messages>\n </c8y-form-group>\n </fieldset>\n </div>\n <div class=\"col-md-6\">\n <fieldset\n class=\"c8y-fieldset p-24\"\n [formGroupName]=\"'headingsAndNavigatorTypography'\"\n >\n <legend>{{ 'Headings & navigator' | translate }}</legend>\n <c8y-form-group class=\"m-b-32\">\n <label\n title=\"font-family-headings\"\n for=\"font-family-headings\"\n translate\n >\n Headings font stack\n </label>\n <input\n class=\"form-control\"\n id=\"font-family-headings\"\n placeholder=\"{{ 'e.g. {{ example }}' | translate : {example: '&quot;Roboto&quot;, Arial, sans-serif'} }}\"\n type=\"text\"\n formControlName=\"font-family-headings\"\n />\n <c8y-messages\n [helpMessage]=\"\n 'Leave empty to use the same font as the base font stack' | translate\n \"\n ></c8y-messages>\n </c8y-form-group>\n <c8y-form-group class=\"m-b-32\">\n <label\n title=\"navigator-font-family\"\n translate\n >\n Navigator font stack\n </label>\n <div class=\"form-control-static\">\n <label class=\"c8y-radio radio-inline\">\n <input\n name=\"navigator-font-family\"\n type=\"radio\"\n formControlName=\"navigator-font-family\"\n [value]=\"'var(--font-family-base)'\"\n />\n <span></span>\n <span translate>Match base font stack</span>\n </label>\n <label\n class=\"c8y-radio radio-inline\"\n title=\"Radio Two\"\n >\n <input\n name=\"navigator-font-family\"\n type=\"radio\"\n formControlName=\"navigator-font-family\"\n [value]=\"'var(--font-family-headings)'\"\n />\n <span></span>\n <span translate>Match headings font stack</span>\n </label>\n </div>\n </c8y-form-group>\n </fieldset>\n </div>\n </div>\n </div>\n </div>\n </div>\n <!-- Cookie banner -->\n <div class=\"card-block separator-top\">\n <div class=\"row\">\n <div class=\"col-xs-12 col-sm-3 col-md-2 p-t-16\">\n <h4\n class=\"text-normal text-right text-left-xs m-b-16\"\n translate\n >\n Cookie banner\n </h4>\n </div>\n <div class=\"col-xs-12 col-sm-9 col-md-10\">\n <fieldset\n class=\"c8y-fieldset p-24\"\n [formGroupName]=\"'cookieBanner'\"\n >\n <legend translate>Cookie banner</legend>\n <label class=\"c8y-switch\">\n <input\n class=\"form-control\"\n name=\"cookieBannerEnabled\"\n type=\"checkbox\"\n [ngModelOptions]=\"{ standalone: true }\"\n [ngModel]=\"!formGroup.value.cookieBanner.cookieBannerDisabled\"\n (ngModelChange)=\"cockieBannerChange($event)\"\n />\n <span></span>\n <span translate>Enable cookie banner</span>\n </label>\n\n <div\n class=\"collapse\"\n [collapse]=\"formGroup.value.cookieBanner.cookieBannerDisabled\"\n [isAnimated]=\"true\"\n >\n <div\n class=\"row\"\n style=\"min-height: 227px\"\n >\n <ng-container *ngIf=\"formGroup.value.cookieBanner.cookieBannerDisabled !== true\">\n <div class=\"col-md-6\">\n <c8y-form-group class=\"m-b-32\">\n <label\n for=\"cookieBannerTitle\"\n translate\n >\n Title\n </label>\n <input\n class=\"form-control\"\n id=\"cookieBannerTitle\"\n name=\"cookieBannerTitle\"\n type=\"text\"\n formControlName=\"cookieBannerTitle\"\n />\n <c8y-messages></c8y-messages>\n </c8y-form-group>\n <c8y-form-group class=\"m-b-32\">\n <label\n for=\"policyUrl\"\n translate\n >\n Link to privacy policy\n </label>\n <input\n class=\"form-control\"\n id=\"policyUrl\"\n name=\"policyUrl\"\n type=\"text\"\n formControlName=\"policyUrl\"\n />\n <c8y-messages></c8y-messages>\n </c8y-form-group>\n <c8y-form-group class=\"m-b-32\">\n <label\n for=\"policyVersion\"\n translate\n >\n Version of privacy policy\n </label>\n <input\n class=\"form-control\"\n id=\"policyVersion\"\n name=\"policyVersion\"\n type=\"text\"\n formControlName=\"policyVersion\"\n />\n <c8y-messages\n [helpMessage]=\"\n 'Changing the version of the privacy policy invalidates already existing cookie consents.'\n | translate\n \"\n ></c8y-messages>\n </c8y-form-group>\n </div>\n\n <div class=\"col-md-6\">\n <c8y-form-group class=\"m-b-32\">\n <label\n for=\"cookieBannerText\"\n translate\n >\n Text\n </label>\n <textarea\n class=\"form-control\"\n id=\"cookieBannerText\"\n name=\"cookieBannerText\"\n rows=\"8\"\n formControlName=\"cookieBannerText\"\n ></textarea>\n <c8y-messages></c8y-messages>\n </c8y-form-group>\n </div>\n </ng-container>\n </div>\n </div>\n </fieldset>\n </div>\n </div>\n </div>\n <!-- Message banner -->\n <div class=\"card-block separator-top\">\n <div class=\"row\">\n <div class=\"col-xs-12 col-sm-3 col-md-2 p-t-16\">\n <h4\n class=\"text-normal text-right text-left-xs m-b-16\"\n translate\n >\n Message banner\n </h4>\n </div>\n\n <div class=\"col-xs-12 col-sm-9 col-md-10\">\n <fieldset\n class=\"c8y-fieldset p-24\"\n [formGroupName]=\"'messageBanner'\"\n >\n <legend translate>Message banner</legend>\n\n <label class=\"c8y-switch\">\n <input\n class=\"form-control\"\n name=\"messageBannerEnabled\"\n type=\"checkbox\"\n formControlName=\"messageBannerEnabled\"\n />\n <span></span>\n <span translate>Enable message banner</span>\n </label>\n <div\n class=\"collapse\"\n [collapse]=\"!formGroup.value.messageBanner.messageBannerEnabled\"\n [isAnimated]=\"true\"\n >\n <div class=\"d-flex a-i-center gap-8 p-t-16 p-b-16\">\n <fieldset class=\"c8y-fieldset p-16\">\n <legend>{{ 'Message type' | translate }}</legend>\n <label\n class=\"c8y-radio radio-inline\"\n title=\"{{ 'Info' | translate }}\"\n >\n <input\n type=\"radio\"\n value=\"info\"\n formControlName=\"messageBannerType\"\n />\n <span></span>\n <span class=\"d-flex a-i-center\">\n <i\n class=\"text-info icon-16 m-r-4\"\n c8yIcon=\"info-circle\"\n ></i>\n Info\n </span>\n </label>\n <label\n class=\"c8y-radio radio-inline\"\n title=\"{{ 'Warning' | translate }}\"\n >\n <input\n type=\"radio\"\n value=\"warning\"\n formControlName=\"messageBannerType\"\n />\n <span></span>\n <span class=\"d-flex a-i-center\">\n <i\n class=\"text-warning icon-16 m-r-4\"\n c8yIcon=\"warning\"\n ></i>\n {{ 'Warning' | translate }}\n </span>\n </label>\n <label\n class=\"c8y-radio radio-inline\"\n title=\"{{ 'Danger' | translate }}\"\n >\n <input\n type=\"radio\"\n value=\"danger\"\n formControlName=\"messageBannerType\"\n />\n <span></span>\n <span class=\"d-flex a-i-center\">\n <i\n class=\"text-danger icon-16 m-r-4\"\n c8yIcon=\"exclamation-circle\"\n ></i>\n {{ 'Danger' | translate }}\n </span>\n </label>\n <label\n class=\"c8y-radio radio-inline\"\n title=\"{{ 'Success' | translate }}\"\n >\n <input\n type=\"radio\"\n value=\"success\"\n formControlName=\"messageBannerType\"\n />\n <span></span>\n <span class=\"d-flex a-i-center\">\n <i\n class=\"text-success icon-16 m-r-4\"\n c8yIcon=\"check-circle\"\n ></i>\n {{ 'Success' | translate }}\n </span>\n </label>\n <label\n class=\"c8y-radio radio-inline\"\n title=\"{{ 'System' | translate }}\"\n >\n <input\n type=\"radio\"\n value=\"system\"\n formControlName=\"messageBannerType\"\n />\n <span></span>\n <span>\n <i\n class=\"text-primary icon-16 m-r4\"\n c8yIcon=\"wrench\"\n ></i>\n {{ 'System' | translate }}\n </span>\n </label>\n </fieldset>\n </div>\n\n <c8y-form-group\n class=\"m-b-32 p-b-32\"\n [style]=\"{ height: '300px' }\"\n *ngIf=\"formGroup.value.messageBanner.messageBannerEnabled\"\n >\n <label\n for=\"messageBannerContent\"\n translate\n >\n Message content\n </label>\n <c8y-editor\n class=\"flex-grow form-control\"\n style=\"height: 100%\"\n formControlName=\"messageBannerContent\"\n [editorOptions]=\"{language: 'markdown'}\"\n monacoEditorMarkerValidator\n ></c8y-editor>\n <c8y-messages\n [helpMessage]=\"messageBannerHelp | translate: messageBannerHelpParams\"\n ></c8y-messages>\n <c8y-messages></c8y-messages>\n </c8y-form-group>\n\n <button\n class=\"btn btn-default\"\n type=\"button\"\n (click)=\"previewBanner()\"\n >\n <i\n class=\"m-r-4\"\n c8yIcon=\"eye\"\n ></i>\n <span translate>Preview banner</span>\n </button>\n </div>\n </fieldset>\n </div>\n </div>\n </div>\n</div>\n" }]
108
108
  }], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.MessageBannerService }] });
109
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJhbmRpbmctZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9icmFuZGluZy9zaGFyZWQvbGF6eS9icmFuZGluZy1mb3JtL2JyYW5kaW5nLWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vYnJhbmRpbmcvc2hhcmVkL2xhenkvYnJhbmRpbmctZm9ybS9icmFuZGluZy1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUMsT0FBTyxFQUF3QixXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDaEYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUN0QyxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNwRixPQUFPLEVBQ0wsZ0NBQWdDLEVBQ2hDLHdDQUF3QyxFQUV4Qyx5QkFBeUIsRUFFMUIsTUFBTSwwQ0FBMEMsQ0FBQztBQUNsRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7Ozs7OztBQWU3RCxNQUFNLE9BQU8scUJBQXFCO0lBaUJoQyxZQUNVLFdBQXdCLEVBQ3hCLG9CQUEwQztRQUQxQyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4Qix5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXNCO1FBakJwRCxzQkFBaUIsR0FBRyxPQUFPLENBQ3pCLG9LQUFvSyxDQUNySyxDQUFDO1FBQ0YsNEJBQXVCLEdBQUc7WUFD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QixDQUFDLENBQUM7UUFDNUUsYUFBYSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsaUJBQWlCLENBQUM7UUFDckQsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVELGFBQWE7UUFDWCxJQUFJLENBQUMsb0JBQW9CLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDekMsQ0FBQzs4R0FqR1UscUJBQXFCO2tHQUFyQixxQkFBcUIscUhDN0JsQyxtcGlCQTRlQSwyQ0R0ZEksVUFBVSxteEVBQ1YsV0FBVyw4QkFDWCxjQUFjLGdQQUNkLCtCQUErQixnS0FDL0IsZUFBZTs7MkZBR04scUJBQXFCO2tCQWJqQyxTQUFTOytCQUNFLG1CQUFtQixjQUVqQixJQUFJLFFBQ1YsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLFdBQ3BCO3dCQUNQLFVBQVU7d0JBQ1YsV0FBVzt3QkFDWCxjQUFjO3dCQUNkLCtCQUErQjt3QkFDL0IsZUFBZTtxQkFDaEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3JtQnVpbGRlciwgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBDb2xsYXBzZU1vZHVsZSB9IGZyb20gJ25neC1ib290c3RyYXAvY29sbGFwc2UnO1xuaW1wb3J0IHsgQ29yZU1vZHVsZSwgZ2V0dGV4dCwgTWVzc2FnZUJhbm5lclNlcnZpY2UgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IGNsb25lRGVlcCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBTdGF0aWNBc3NldHNGaWxlUGlja2VyQ29tcG9uZW50IH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9zdGF0aWMtYXNzZXRzJztcbmltcG9ydCB7XG4gIGJyYW5kaW5nRm9ybUdyb3VwVG9wTGV2ZWxFbnRyaWVzLFxuICBicmFuZGluZ0Zvcm1Hcm91cFRvcExldmVsRW50cmllc1RvVW5wYWNrLFxuICBCcmFuZGluZ09wdGlvbnNKc29uLFxuICBjcmVhdGVHZW5lcmljQnJhbmRpbmdGb3JtLFxuICBUb3BMZXZlbFZhbHVlc1xufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2JyYW5kaW5nL3NoYXJlZC9kYXRhJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IEVkaXRvckNvbXBvbmVudCB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvZWRpdG9yJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWJyYW5kaW5nLWZvcm0nLFxuICB0ZW1wbGF0ZVVybDogJy4vYnJhbmRpbmctZm9ybS5jb21wb25lbnQuaHRtbCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGhvc3Q6IHsgY2xhc3M6ICdkLWNvbnRlbnRzJyB9LFxuICBpbXBvcnRzOiBbXG4gICAgQ29yZU1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBDb2xsYXBzZU1vZHVsZSxcbiAgICBTdGF0aWNBc3NldHNGaWxlUGlja2VyQ29tcG9uZW50LFxuICAgIEVkaXRvckNvbXBvbmVudFxuICBdXG59KVxuZXhwb3J0IGNsYXNzIEJyYW5kaW5nRm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgZm9ybUdyb3VwOiBSZXR1cm5UeXBlPEJyYW5kaW5nRm9ybUNvbXBvbmVudFsnaW5pdEZvcm0nXT47XG4gIG1lc3NhZ2VCYW5uZXJIZWxwID0gZ2V0dGV4dChcbiAgICAnU3VwcG9ydHMgbWFya2Rvd24uIFVzZSB7eyBoZWFkZXJNYXJrIH19IGZvciBoZWFkZXJzLCB7eyBsaXN0TWFyayB9fSBmb3IgbGlzdHMsIHt7IGJvbGRNYXJrIH19IGZvciBib2xkLCB7eyBpdGFsaWNNYXJrIH19IGZvciBpdGFsaWMsIGFuZCB7eyBsaW5rTWFyayB9fSBmb3IgbGlua3MuJ1xuICApO1xuICBtZXNzYWdlQmFubmVySGVscFBhcmFtcyA9IHtcbiAgICBoZWFkZXJNYXJrOiAnYCNgJyxcbiAgICBsaXN0TWFyazogJ2AqYCcsXG4gICAgYm9sZE1hcms6ICdgKipgJyxcbiAgICBpdGFsaWNNYXJrOiAnYF9gJyxcbiAgICBsaW5rTWFyazogJ2BbXSgpYCdcbiAgfTtcbiAgcHJpdmF0ZSBvblRvdWNoZWQ6ICgpID0+IHZvaWQ7XG5cbiAgcHJpdmF0ZSBleHRlcm5hbFZhbHVlOiBCcmFuZGluZ09wdGlvbnNKc29uID0ge307XG4gIHByaXZhdGUgZm9ybUdyb3VwVmFsdWVDaGFuZ2VzJDogQnJhbmRpbmdGb3JtQ29tcG9uZW50Wydmb3JtR3JvdXAnXVsndmFsdWVDaGFuZ2VzJ107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSBtZXNzYWdlQmFubmVyU2VydmljZTogTWVzc2FnZUJhbm5lclNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5mb3JtR3JvdXAgPSB0aGlzLmluaXRGb3JtKCk7XG4gICAgdGhpcy5mb3JtR3JvdXBWYWx1ZUNoYW5nZXMkID0gdGhpcy5mb3JtR3JvdXAudmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpO1xuICB9XG5cbiAgd3JpdGVWYWx1ZShvYmo6IHN0cmluZyk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXJzZWRPYmogPSBKU09OLnBhcnNlKG9iaik7XG4gICAgICB0aGlzLmV4dGVybmFsVmFsdWUgPSBwYXJzZWRPYmo7XG4gICAgICB0aGlzLmFwcGx5U3RhdGVUb0Zvcm0ocGFyc2VkT2JqKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBmYWlsZWQgdG8gcGFyc2VcbiAgICB9XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMuZm9ybUdyb3VwVmFsdWVDaGFuZ2VzJC5zdWJzY3JpYmUodmFsdWUgPT4gZm4odGhpcy5jb252ZXJ0Rm9ybVRvU3RhdGUodmFsdWUpKSk7XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cblxuICBjb2NraWVCYW5uZXJDaGFuZ2UodG9nZ2xlU3RhdGU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5jb29raWVCYW5uZXIucGF0Y2hWYWx1ZSh7IGNvb2tpZUJhbm5lckRpc2FibGVkOiAhdG9nZ2xlU3RhdGUgfSk7XG4gIH1cblxuICBvbkJsdXIoKTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgfVxuXG4gIGluaXRGb3JtKCkge1xuICAgIHJldHVybiBjcmVhdGVHZW5lcmljQnJhbmRpbmdGb3JtKHRoaXMuZm9ybUJ1aWxkZXIpO1xuICB9XG5cbiAgYXBwbHlTdGF0ZVRvRm9ybShicmFuZGluZzogQnJhbmRpbmdPcHRpb25zSnNvbikge1xuICAgIGlmICghYnJhbmRpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IHRvQmVQYXRjaGVkID0gYnJhbmRpbmdGb3JtR3JvdXBUb3BMZXZlbEVudHJpZXMucmVkdWNlUmlnaHQoKHByZXYsIGN1cnIpID0+IHtcbiAgICAgIGlmIChicmFuZGluZ0Zvcm1Hcm91cFRvcExldmVsRW50cmllc1RvVW5wYWNrLmluY2x1ZGVzKGN1cnIgYXMgYW55KSkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihwcmV2LCB7IFtjdXJyXTogYnJhbmRpbmcgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihwcmV2LCB7IFtjdXJyXTogYnJhbmRpbmdbY3Vycl0gfSk7XG4gICAgfSwge30pO1xuXG4gICAgdG9CZVBhdGNoZWQgPSBPYmplY3Qua2V5cyh0aGlzLmZvcm1Hcm91cC5jb250cm9scylcbiAgICAgIC5maWx0ZXIoa2V5ID0+ICFicmFuZGluZ0Zvcm1Hcm91cFRvcExldmVsRW50cmllcy5pbmNsdWRlcyhrZXkgYXMgYW55KSlcbiAgICAgIC5yZWR1Y2VSaWdodCgocHJldiwgY3VycikgPT4ge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihwcmV2LCB7IFtjdXJyXTogYnJhbmRpbmcuYnJhbmRpbmdDc3NWYXJzIHx8IHt9IH0pO1xuICAgICAgfSwgdG9CZVBhdGNoZWQpO1xuICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUodG9CZVBhdGNoZWQpO1xuICB9XG5cbiAgY29udmVydEZvcm1Ub1N0YXRlKHZhbHVlOiBCcmFuZGluZ0Zvcm1Db21wb25lbnRbJ2Zvcm1Hcm91cCddWyd2YWx1ZSddKTogc3RyaW5nIHtcbiAgICBjb25zdCB0b3BMZXZlbDogVG9wTGV2ZWxWYWx1ZXMgPSBicmFuZGluZ0Zvcm1Hcm91cFRvcExldmVsRW50cmllcy5yZWR1Y2VSaWdodCgocHJldiwgY3VycikgPT4ge1xuICAgICAgaWYgKGJyYW5kaW5nRm9ybUdyb3VwVG9wTGV2ZWxFbnRyaWVzVG9VbnBhY2suaW5jbHVkZXMoY3VyciBhcyBhbnkpKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHByZXYsIHZhbHVlW2N1cnJdKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHByZXYsIHsgW2N1cnJdOiB2YWx1ZVtjdXJyXSB9KTtcbiAgICB9LCB7fSk7XG4gICAgY29uc3QgbmV3QnJhbmRpbmdDc3NWYXJzID0gT2JqZWN0LmVudHJpZXModmFsdWUpLnJlZHVjZVJpZ2h0KChwcmV2LCBba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgIGlmIChicmFuZGluZ0Zvcm1Hcm91cFRvcExldmVsRW50cmllcy5pbmNsdWRlcyhrZXkgYXMgYW55KSkge1xuICAgICAgICByZXR1cm4gcHJldjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHByZXYsIHZhbHVlKTtcbiAgICB9LCB7fSk7XG4gICAgY29uc3QgZXh0ZXJuYWxWYWx1ZTogQnJhbmRpbmdPcHRpb25zSnNvbiA9IGNsb25lRGVlcCh0aGlzLmV4dGVybmFsVmFsdWUgfHwge30pO1xuICAgIE9iamVjdC5hc3NpZ24oZXh0ZXJuYWxWYWx1ZSwgdG9wTGV2ZWwpO1xuICAgIGNvbnN0IGN1cnJlbnRDU1NWYXJzID0gZXh0ZXJuYWxWYWx1ZVsnYnJhbmRpbmdDc3NWYXJzJ10gfHwge307XG4gICAgY29uc3QgYXNzaWduZWROZXdWYWx1ZXMgPSBPYmplY3QuYXNzaWduKGN1cnJlbnRDU1NWYXJzLCBuZXdCcmFuZGluZ0Nzc1ZhcnMpO1xuICAgIGV4dGVybmFsVmFsdWVbJ2JyYW5kaW5nQ3NzVmFycyddID0gYXNzaWduZWROZXdWYWx1ZXM7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGV4dGVybmFsVmFsdWUsIG51bGwsIDIpO1xuICB9XG5cbiAgcHJldmlld0Jhbm5lcigpOiB2b2lkIHtcbiAgICB0aGlzLm1lc3NhZ2VCYW5uZXJTZXJ2aWNlLnNob3dCYW5uZXIoKTtcbiAgfVxufVxuIiwiPGRpdlxuICBjbGFzcz1cImlubmVyLXNjcm9sbFwiXG4gIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCJcbj5cbiAgPCEtLSAgVGl0bGUgJiBGYXZpY29uLS0+XG4gIDxkaXYgY2xhc3M9XCJjYXJkLWJsb2NrXCI+XG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy0xMiBjb2wtc20tMyBjb2wtbWQtMiBwLXQtMTZcIj5cbiAgICAgICAgPGg0IGNsYXNzPVwidGV4dC1ub3JtYWwgdGV4dC1yaWdodCB0ZXh0LWxlZnQteHMgbS1iLTE2XCI+XG4gICAgICAgICAge3sgJ1RpdGxlICYgZmF2aWNvbicgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9oND5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy0xMiBjb2wtc20tOSBjb2wtbWQtMTBcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwicm93IHAtdC0xNiBwLWItMTZcIlxuICAgICAgICAgIFtmb3JtR3JvdXBOYW1lXT1cIidnZW5lcmljQXBwbGljYXRpb25PcHRpb25zJ1wiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cbiAgICAgICAgICAgIDxjOHktZm9ybS1ncm91cCBjbGFzcz1cIm0tYi0zMlwiPlxuICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICBmb3I9XCJnbG9iYWxUaXRsZVwiXG4gICAgICAgICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBUaXRsZVxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgaWQ9XCJnbG9iYWxUaXRsZVwiXG4gICAgICAgICAgICAgICAgbmFtZT1cImdsb2JhbFRpdGxlXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZ2xvYmFsVGl0bGVcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8Yzh5LW1lc3NhZ2VzXG4gICAgICAgICAgICAgICAgW2hlbHBNZXNzYWdlXT1cIidUaXRsZSB0byBkaXNwbGF5IGluIHRoZSBicm93c2VyIHRhYicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICA+PC9jOHktbWVzc2FnZXM+XG4gICAgICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxuICAgICAgICAgICAgPGM4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgICAgICA8bGFiZWwgdHJhbnNsYXRlPkZhdmljb248L2xhYmVsPlxuICAgICAgICAgICAgICA8Yzh5LXN0YXRpYy1hc3NldHMtZmlsZS1waWNrZXJcbiAgICAgICAgICAgICAgICBuYW1lPVwiZmF2aWNvblVybFwiXG4gICAgICAgICAgICAgICAgW3N1cHBvcnRlZEZpbGVFeHRlbnNpb25zXT1cIlsnaWNvJ11cIlxuICAgICAgICAgICAgICAgIFtpc0NTU1VSTF09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZmF2aWNvblVybFwiXG4gICAgICAgICAgICAgID48L2M4eS1zdGF0aWMtYXNzZXRzLWZpbGUtcGlja2VyPlxuICAgICAgICAgICAgICA8Yzh5LW1lc3NhZ2VzIFtoZWxwTWVzc2FnZV09XCInU3VwcG9ydGVkIGZpbGVzOiAqLmljbydcIj48L2M4eS1tZXNzYWdlcz5cbiAgICAgICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJjYXJkLWJsb2NrIHNlcGFyYXRvci10b3BcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLXhzLTEyIGNvbC1zbS0zIGNvbC1tZC0yIHAtdC0xNlwiPlxuICAgICAgPGg0XG4gICAgICAgIGNsYXNzPVwidGV4dC1ub3JtYWwgdGV4dC1yaWdodCB0ZXh0LWxlZnQteHMgbS1iLTE2XCJcbiAgICAgICAgdHJhbnNsYXRlXG4gICAgICA+XG4gICAgICAgIERhcmsgdGhlbWVcbiAgICAgIDwvaDQ+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImNvbC14cy0xMiBjb2wtc20tOSBjb2wtbWQtMTBcIj5cbiAgICAgIDxjOHktZm9ybS1ncm91cCBjbGFzcz1cIm0tYi0zMiBwLXQtOCBtLXQtNFwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJjOHktc3dpdGNoXCI+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICBuYW1lPVwiZGFya1RoZW1lQXZhaWxhYmxlXCJcbiAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJkYXJrVGhlbWVBdmFpbGFibGVcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPHNwYW4+PC9zcGFuPlxuICAgICAgICAgIDxzcGFuIHRyYW5zbGF0ZT5FbmFibGUgZGFyayB0aGVtZSBzdXBwb3J0PC9zcGFuPlxuICAgICAgICA8L2xhYmVsPlxuICAgICAgPC9jOHktZm9ybS1ncm91cD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDwhLS0gVHlwb2dyYXBoeSAtLT5cbiAgPGRpdiBjbGFzcz1cImNhcmQtYmxvY2sgc2VwYXJhdG9yLXRvcFwiPlxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wteHMtMTIgY29sLXNtLTMgY29sLW1kLTIgcC10LTE2XCI+XG4gICAgICAgIDxoNFxuICAgICAgICAgIGNsYXNzPVwidGV4dC1ub3JtYWwgdGV4dC1yaWdodCB0ZXh0LWxlZnQteHMgbS1iLTE2XCJcbiAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgPlxuICAgICAgICAgIFR5cG9ncmFwaHlcbiAgICAgICAgPC9oND5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy0xMiBjb2wtc20tOSBjb2wtbWQtMTBcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxuICAgICAgICAgICAgPGZpZWxkc2V0XG4gICAgICAgICAgICAgIGNsYXNzPVwiYzh5LWZpZWxkc2V0IHAtMjRcIlxuICAgICAgICAgICAgICBbZm9ybUdyb3VwTmFtZV09XCInYmFzZVR5cG9ncmFwaHknXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGxlZ2VuZCB0cmFuc2xhdGU+QmFzZSB0eXBvZ3JhcGh5PC9sZWdlbmQ+XG4gICAgICAgICAgICAgIDxjOHktZm9ybS1ncm91cCBjbGFzcz1cIm0tYi0zMlwiPlxuICAgICAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgICAgZm9yPVwiZm9udC11cmxcIlxuICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgRm9udHMgVVJMXG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgIGlkPVwiZm9udC11cmxcIlxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7e1xuICAgICAgICAgICAgICAgICAgICAnZS5nLiB7eyBleGFtcGxlIH19JyB8IHRyYW5zbGF0ZSA6IHsgZXhhbXBsZTogJ2h0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzP2ZhbWlseT1Sb2JvdG86NDAwLDUwMCw3MDAnIH1cbiAgICAgICAgICAgICAgICAgIH19XCJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImZvbnQtdXJsXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxjOHktbWVzc2FnZXMgW2hlbHBNZXNzYWdlXT1cIidUaGUgR29vZ2xlIGZvbnRzIFVSTCcgfCB0cmFuc2xhdGVcIj48L2M4eS1tZXNzYWdlcz5cbiAgICAgICAgICAgICAgPC9jOHktZm9ybS1ncm91cD5cbiAgICAgICAgICAgICAgPGM4eS1mb3JtLWdyb3VwIGNsYXNzPVwibS1iLTMyXCI+XG4gICAgICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgICAgICB0aXRsZT1cImZvbnQtZmFtaWx5LWJhc2VcIlxuICAgICAgICAgICAgICAgICAgZm9yPVwiZm9udC1mYW1pbHktYmFzZVwiXG4gICAgICAgICAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICBCYXNlIGZvbnQgc3RhY2tcbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgaWQ9XCJmb250LWZhbWlseS1iYXNlXCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ2UuZy4ge3sgZXhhbXBsZSB9fScgfCB0cmFuc2xhdGUgOiB7ZXhhbXBsZTogJyZxdW90O1JvYm90byZxdW90OywgQXJpYWwsIHNhbnMtc2VyaWYnfSB9fVwiXG4gICAgICAgICAgICAgICAgICBuYW1lPVwiZm9udC1mYW1pbHktYmFzZVwiXG4gICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJmb250LWZhbWlseS1iYXNlXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxjOHktbWVzc2FnZXM+PC9jOHktbWVzc2FnZXM+XG4gICAgICAgICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxuICAgICAgICAgICAgPGZpZWxkc2V0XG4gICAgICAgICAgICAgIGNsYXNzPVwiYzh5LWZpZWxkc2V0IHAtMjRcIlxuICAgICAgICAgICAgICBbZm9ybUdyb3VwTmFtZV09XCInaGVhZGluZ3NBbmROYXZpZ2F0b3JUeXBvZ3JhcGh5J1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxsZWdlbmQ+e3sgJ0hlYWRpbmdzICYgbmF2aWdhdG9yJyB8IHRyYW5zbGF0ZSB9fTwvbGVnZW5kPlxuICAgICAgICAgICAgICA8Yzh5LWZvcm0tZ3JvdXAgY2xhc3M9XCJtLWItMzJcIj5cbiAgICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICAgIHRpdGxlPVwiZm9udC1mYW1pbHktaGVhZGluZ3NcIlxuICAgICAgICAgICAgICAgICAgZm9yPVwiZm9udC1mYW1pbHktaGVhZGluZ3NcIlxuICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgSGVhZGluZ3MgZm9udCBzdGFja1xuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICBpZD1cImZvbnQtZmFtaWx5LWhlYWRpbmdzXCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ2UuZy4ge3sgZXhhbXBsZSB9fScgfCB0cmFuc2xhdGUgOiB7ZXhhbXBsZTogJyZxdW90O1JvYm90byZxdW90OywgQXJpYWwsIHNhbnMtc2VyaWYnfSB9fVwiXG4gICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJmb250LWZhbWlseS1oZWFkaW5nc1wiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8Yzh5LW1lc3NhZ2VzXG4gICAgICAgICAgICAgICAgICBbaGVscE1lc3NhZ2VdPVwiXG4gICAgICAgICAgICAgICAgICAgICdMZWF2ZSBlbXB0eSB0byB1c2UgdGhlIHNhbWUgZm9udCBhcyB0aGUgYmFzZSBmb250IHN0YWNrJyB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+PC9jOHktbWVzc2FnZXM+XG4gICAgICAgICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgICAgIDxjOHktZm9ybS1ncm91cCBjbGFzcz1cIm0tYi0zMlwiPlxuICAgICAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgICAgdGl0bGU9XCJuYXZpZ2F0b3ItZm9udC1mYW1pbHlcIlxuICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgTmF2aWdhdG9yIGZvbnQgc3RhY2tcbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNvbnRyb2wtc3RhdGljXCI+XG4gICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjOHktcmFkaW8gcmFkaW8taW5saW5lXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJuYXZpZ2F0b3ItZm9udC1mYW1pbHlcIlxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibmF2aWdhdG9yLWZvbnQtZmFtaWx5XCJcbiAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiJ3ZhcigtLWZvbnQtZmFtaWx5LWJhc2UpJ1wiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gdHJhbnNsYXRlPk1hdGNoIGJhc2UgZm9udCBzdGFjazwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjOHktcmFkaW8gcmFkaW8taW5saW5lXCJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJSYWRpbyBUd29cIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwibmF2aWdhdG9yLWZvbnQtZmFtaWx5XCJcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm5hdmlnYXRvci1mb250LWZhbWlseVwiXG4gICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIid2YXIoLS1mb250LWZhbWlseS1oZWFkaW5ncyknXCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiB0cmFuc2xhdGU+TWF0Y2ggaGVhZGluZ3MgZm9udCBzdGFjazwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPCEtLSBDb29raWUgYmFubmVyIC0tPlxuICA8ZGl2IGNsYXNzPVwiY2FyZC1ibG9jayBzZXBhcmF0b3ItdG9wXCI+XG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy0xMiBjb2wtc20tMyBjb2wtbWQtMiBwLXQtMTZcIj5cbiAgICAgICAgPGg0XG4gICAgICAgICAgY2xhc3M9XCJ0ZXh0LW5vcm1hbCB0ZXh0LXJpZ2h0IHRleHQtbGVmdC14cyBtLWItMTZcIlxuICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICA+XG4gICAgICAgICAgQ29va2llIGJhbm5lclxuICAgICAgICA8L2g0PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLXhzLTEyIGNvbC1zbS05IGNvbC1tZC0xMFwiPlxuICAgICAgICA8ZmllbGRzZXRcbiAgICAgICAgICBjbGFzcz1cImM4eS1maWVsZHNldCBwLTI0XCJcbiAgICAgICAgICBbZm9ybUdyb3VwTmFtZV09XCInY29va2llQmFubmVyJ1wiXG4gICAgICAgID5cbiAgICAgICAgICA8bGVnZW5kIHRyYW5zbGF0ZT5Db29raWUgYmFubmVyPC9sZWdlbmQ+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYzh5LXN3aXRjaFwiPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgbmFtZT1cImNvb2tpZUJhbm5lckVuYWJsZWRcIlxuICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICBbbmdNb2RlbE9wdGlvbnNdPVwieyBzdGFuZGFsb25lOiB0cnVlIH1cIlxuICAgICAgICAgICAgICBbbmdNb2RlbF09XCIhZm9ybUdyb3VwLnZhbHVlLmNvb2tpZUJhbm5lci5jb29raWVCYW5uZXJEaXNhYmxlZFwiXG4gICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNvY2tpZUJhbm5lckNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8c3Bhbj48L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiB0cmFuc2xhdGU+RW5hYmxlIGNvb2tpZSBiYW5uZXI8L3NwYW4+XG4gICAgICAgICAgPC9sYWJlbD5cblxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiY29sbGFwc2VcIlxuICAgICAgICAgICAgW2NvbGxhcHNlXT1cImZvcm1Hcm91cC52YWx1ZS5jb29raWVCYW5uZXIuY29va2llQmFubmVyRGlzYWJsZWRcIlxuICAgICAgICAgICAgW2lzQW5pbWF0ZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cInJvd1wiXG4gICAgICAgICAgICAgIHN0eWxlPVwibWluLWhlaWdodDogMjI3cHhcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZm9ybUdyb3VwLnZhbHVlLmNvb2tpZUJhbm5lci5jb29raWVCYW5uZXJEaXNhYmxlZCAhPT0gdHJ1ZVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxuICAgICAgICAgICAgICAgICAgPGM4eS1mb3JtLWdyb3VwIGNsYXNzPVwibS1iLTMyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgICAgICAgIGZvcj1cImNvb2tpZUJhbm5lclRpdGxlXCJcbiAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIFRpdGxlXG4gICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgICBpZD1cImNvb2tpZUJhbm5lclRpdGxlXCJcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiY29va2llQmFubmVyVGl0bGVcIlxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJjb29raWVCYW5uZXJUaXRsZVwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDxjOHktbWVzc2FnZXM+PC9jOHktbWVzc2FnZXM+XG4gICAgICAgICAgICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgICAgICAgICAgPGM4eS1mb3JtLWdyb3VwIGNsYXNzPVwibS1iLTMyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgICAgICAgIGZvcj1cInBvbGljeVVybFwiXG4gICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICBMaW5rIHRvIHByaXZhY3kgcG9saWN5XG4gICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgICBpZD1cInBvbGljeVVybFwiXG4gICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInBvbGljeVVybFwiXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInBvbGljeVVybFwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDxjOHktbWVzc2FnZXM+PC9jOHktbWVzc2FnZXM+XG4gICAgICAgICAgICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgICAgICAgICAgPGM4eS1mb3JtLWdyb3VwIGNsYXNzPVwibS1iLTMyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgICAgICAgIGZvcj1cInBvbGljeVZlcnNpb25cIlxuICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiBvZiBwcml2YWN5IHBvbGljeVxuICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgaWQ9XCJwb2xpY3lWZXJzaW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwicG9saWN5VmVyc2lvblwiXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInBvbGljeVZlcnNpb25cIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8Yzh5LW1lc3NhZ2VzXG4gICAgICAgICAgICAgICAgICAgICAgW2hlbHBNZXNzYWdlXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgJ0NoYW5naW5nIHRoZSB2ZXJzaW9uIG9mIHRoZSBwcml2YWN5IHBvbGljeSBpbnZhbGlkYXRlcyBhbHJlYWR5IGV4aXN0aW5nIGNvb2tpZSBjb25zZW50cy4nXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvYzh5LW1lc3NhZ2VzPlxuICAgICAgICAgICAgICAgICAgPC9jOHktZm9ybS1ncm91cD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxuICAgICAgICAgICAgICAgICAgPGM4eS1mb3JtLWdyb3VwIGNsYXNzPVwibS1iLTMyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgICAgICAgIGZvcj1cImNvb2tpZUJhbm5lclRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgVGV4dFxuICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWFcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgaWQ9XCJjb29raWVCYW5uZXJUZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiY29va2llQmFubmVyVGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgcm93cz1cIjhcIlxuICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImNvb2tpZUJhbm5lclRleHRcIlxuICAgICAgICAgICAgICAgICAgICA+PC90ZXh0YXJlYT5cbiAgICAgICAgICAgICAgICAgICAgPGM4eS1tZXNzYWdlcz48L2M4eS1tZXNzYWdlcz5cbiAgICAgICAgICAgICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZmllbGRzZXQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDwhLS0gTWVzc2FnZSBiYW5uZXIgLS0+XG4gIDxkaXYgY2xhc3M9XCJjYXJkLWJsb2NrIHNlcGFyYXRvci10b3BcIj5cbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLXhzLTEyIGNvbC1zbS0zIGNvbC1tZC0yIHAtdC0xNlwiPlxuICAgICAgICA8aDRcbiAgICAgICAgICBjbGFzcz1cInRleHQtbm9ybWFsIHRleHQtcmlnaHQgdGV4dC1sZWZ0LXhzIG0tYi0xNlwiXG4gICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgID5cbiAgICAgICAgICBNZXNzYWdlIGJhbm5lclxuICAgICAgICA8L2g0PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wteHMtMTIgY29sLXNtLTkgY29sLW1kLTEwXCI+XG4gICAgICAgIDxmaWVsZHNldFxuICAgICAgICAgIGNsYXNzPVwiYzh5LWZpZWxkc2V0IHAtMjRcIlxuICAgICAgICAgIFtmb3JtR3JvdXBOYW1lXT1cIidtZXNzYWdlQmFubmVyJ1wiXG4gICAgICAgID5cbiAgICAgICAgICA8bGVnZW5kIHRyYW5zbGF0ZT5NZXNzYWdlIGJhbm5lcjwvbGVnZW5kPlxuXG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYzh5LXN3aXRjaFwiPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgbmFtZT1cIm1lc3NhZ2VCYW5uZXJFbmFibGVkXCJcbiAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibWVzc2FnZUJhbm5lckVuYWJsZWRcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIHRyYW5zbGF0ZT5FbmFibGUgbWVzc2FnZSBiYW5uZXI8L3NwYW4+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImNvbGxhcHNlXCJcbiAgICAgICAgICAgIFtjb2xsYXBzZV09XCIhZm9ybUdyb3VwLnZhbHVlLm1lc3NhZ2VCYW5uZXIubWVzc2FnZUJhbm5lckVuYWJsZWRcIlxuICAgICAgICAgICAgW2lzQW5pbWF0ZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhLWktY2VudGVyIGdhcC04IHAtdC0xNiBwLWItMTZcIj5cbiAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPVwiYzh5LWZpZWxkc2V0IHAtMTZcIj5cbiAgICAgICAgICAgICAgICA8bGVnZW5kPnt7ICdNZXNzYWdlIHR5cGUnIHwgdHJhbnNsYXRlIH19PC9sZWdlbmQ+XG4gICAgICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImM4eS1yYWRpbyByYWRpby1pbmxpbmVcIlxuICAgICAgICAgICAgICAgICAgdGl0bGU9XCJ7eyAnSW5mbycgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT1cImluZm9cIlxuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJtZXNzYWdlQmFubmVyVHlwZVwiXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkLWZsZXggYS1pLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1pbmZvIGljb24tMTYgbS1yLTRcIlxuICAgICAgICAgICAgICAgICAgICAgIGM4eUljb249XCJpbmZvLWNpcmNsZVwiXG4gICAgICAgICAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgICAgICAgICAgIEluZm9cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjOHktcmFkaW8gcmFkaW8taW5saW5lXCJcbiAgICAgICAgICAgICAgICAgIHRpdGxlPVwie3sgJ1dhcm5pbmcnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCJ3YXJuaW5nXCJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibWVzc2FnZUJhbm5lclR5cGVcIlxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZC1mbGV4IGEtaS1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtd2FybmluZyBpY29uLTE2IG0tci00XCJcbiAgICAgICAgICAgICAgICAgICAgICBjOHlJY29uPVwid2FybmluZ1wiXG4gICAgICAgICAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgICAgICAgICAgIHt7ICdXYXJuaW5nJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImM4eS1yYWRpbyByYWRpby1pbmxpbmVcIlxuICAgICAgICAgICAgICAgICAgdGl0bGU9XCJ7eyAnRGFuZ2VyJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPVwiZGFuZ2VyXCJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibWVzc2FnZUJhbm5lclR5cGVcIlxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZC1mbGV4IGEtaS1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtZGFuZ2VyIGljb24tMTYgbS1yLTRcIlxuICAgICAgICAgICAgICAgICAgICAgIGM4eUljb249XCJleGNsYW1hdGlvbi1jaXJjbGVcIlxuICAgICAgICAgICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAgICAgICAgICB7eyAnRGFuZ2VyJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImM4eS1yYWRpbyByYWRpby1pbmxpbmVcIlxuICAgICAgICAgICAgICAgICAgdGl0bGU9XCJ7eyAnU3VjY2VzcycgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT1cInN1Y2Nlc3NcIlxuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJtZXNzYWdlQmFubmVyVHlwZVwiXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkLWZsZXggYS1pLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1zdWNjZXNzIGljb24tMTYgbS1yLTRcIlxuICAgICAgICAgICAgICAgICAgICAgIGM4eUljb249XCJjaGVjay1jaXJjbGVcIlxuICAgICAgICAgICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAgICAgICAgICB7eyAnU3VjY2VzcycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjOHktcmFkaW8gcmFkaW8taW5saW5lXCJcbiAgICAgICAgICAgICAgICAgIHRpdGxlPVwie3sgJ1N5c3RlbScgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT1cInN5c3RlbVwiXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm1lc3NhZ2VCYW5uZXJUeXBlXCJcbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtcHJpbWFyeSBpY29uLTE2IG0tcjRcIlxuICAgICAgICAgICAgICAgICAgICAgIGM4eUljb249XCJ3cmVuY2hcIlxuICAgICAgICAgICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAgICAgICAgICB7eyAnU3lzdGVtJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgIDwvZmllbGRzZXQ+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGM4eS1mb3JtLWdyb3VwXG4gICAgICAgICAgICAgIGNsYXNzPVwibS1iLTMyIHAtYi0zMlwiXG4gICAgICAgICAgICAgIFtzdHlsZV09XCJ7IGhlaWdodDogJzMwMHB4JyB9XCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJmb3JtR3JvdXAudmFsdWUubWVzc2FnZUJhbm5lci5tZXNzYWdlQmFubmVyRW5hYmxlZFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgIGZvcj1cIm1lc3NhZ2VCYW5uZXJDb250ZW50XCJcbiAgICAgICAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIE1lc3NhZ2UgY29udGVudFxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICA8Yzh5LWVkaXRvclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleC1ncm93IGZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgc3R5bGU9XCJoZWlnaHQ6IDEwMCVcIlxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm1lc3NhZ2VCYW5uZXJDb250ZW50XCJcbiAgICAgICAgICAgICAgICBtb25hY29FZGl0b3JNYXJrZXJWYWxpZGF0b3JcbiAgICAgICAgICAgICAgPjwvYzh5LWVkaXRvcj5cbiAgICAgICAgICAgICAgPGM4eS1tZXNzYWdlc1xuICAgICAgICAgICAgICAgIFtoZWxwTWVzc2FnZV09XCJtZXNzYWdlQmFubmVySGVscCB8IHRyYW5zbGF0ZTogbWVzc2FnZUJhbm5lckhlbHBQYXJhbXNcIlxuICAgICAgICAgICAgICA+PC9jOHktbWVzc2FnZXM+XG4gICAgICAgICAgICAgIDxjOHktbWVzc2FnZXM+PC9jOHktbWVzc2FnZXM+XG4gICAgICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuXG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0XCJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJwcmV2aWV3QmFubmVyKClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgIGNsYXNzPVwibS1yLTRcIlxuICAgICAgICAgICAgICAgIGM4eUljb249XCJleWVcIlxuICAgICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAgICA8c3BhbiB0cmFuc2xhdGU+UHJldmlldyBiYW5uZXI8L3NwYW4+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9maWVsZHNldD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
109
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJhbmRpbmctZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9icmFuZGluZy9zaGFyZWQvbGF6eS9icmFuZGluZy1mb3JtL2JyYW5kaW5nLWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vYnJhbmRpbmcvc2hhcmVkL2xhenkvYnJhbmRpbmctZm9ybS9icmFuZGluZy1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUMsT0FBTyxFQUF3QixXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDaEYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUN0QyxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNwRixPQUFPLEVBQ0wsZ0NBQWdDLEVBQ2hDLHdDQUF3QyxFQUV4Qyx5QkFBeUIsRUFFMUIsTUFBTSwwQ0FBMEMsQ0FBQztBQUNsRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7Ozs7OztBQWU3RCxNQUFNLE9BQU8scUJBQXFCO0lBaUJoQyxZQUNVLFdBQXdCLEVBQ3hCLG9CQUEwQztRQUQxQyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4Qix5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXNCO1FBakJwRCxzQkFBaUIsR0FBRyxPQUFPLENBQ3pCLG9LQUFvSyxDQUNySyxDQUFDO1FBQ0YsNEJBQXVCLEdBQUc7WUFD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QixDQUFDLENBQUM7UUFDNUUsYUFBYSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsaUJBQWlCLENBQUM7UUFDckQsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVELGFBQWE7UUFDWCxJQUFJLENBQUMsb0JBQW9CLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDekMsQ0FBQzs4R0FqR1UscUJBQXFCO2tHQUFyQixxQkFBcUIscUhDN0JsQywrc2lCQTZlQSwyQ0R2ZEksVUFBVSxteEVBQ1YsV0FBVyw4QkFDWCxjQUFjLGdQQUNkLCtCQUErQixnS0FDL0IsZUFBZTs7MkZBR04scUJBQXFCO2tCQWJqQyxTQUFTOytCQUNFLG1CQUFtQixjQUVqQixJQUFJLFFBQ1YsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLFdBQ3BCO3dCQUNQLFVBQVU7d0JBQ1YsV0FBVzt3QkFDWCxjQUFjO3dCQUNkLCtCQUErQjt3QkFDL0IsZUFBZTtxQkFDaEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3JtQnVpbGRlciwgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBDb2xsYXBzZU1vZHVsZSB9IGZyb20gJ25neC1ib290c3RyYXAvY29sbGFwc2UnO1xuaW1wb3J0IHsgQ29yZU1vZHVsZSwgZ2V0dGV4dCwgTWVzc2FnZUJhbm5lclNlcnZpY2UgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IGNsb25lRGVlcCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBTdGF0aWNBc3NldHNGaWxlUGlja2VyQ29tcG9uZW50IH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9zdGF0aWMtYXNzZXRzJztcbmltcG9ydCB7XG4gIGJyYW5kaW5nRm9ybUdyb3VwVG9wTGV2ZWxFbnRyaWVzLFxuICBicmFuZGluZ0Zvcm1Hcm91cFRvcExldmVsRW50cmllc1RvVW5wYWNrLFxuICBCcmFuZGluZ09wdGlvbnNKc29uLFxuICBjcmVhdGVHZW5lcmljQnJhbmRpbmdGb3JtLFxuICBUb3BMZXZlbFZhbHVlc1xufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2JyYW5kaW5nL3NoYXJlZC9kYXRhJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IEVkaXRvckNvbXBvbmVudCB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvZWRpdG9yJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWJyYW5kaW5nLWZvcm0nLFxuICB0ZW1wbGF0ZVVybDogJy4vYnJhbmRpbmctZm9ybS5jb21wb25lbnQuaHRtbCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGhvc3Q6IHsgY2xhc3M6ICdkLWNvbnRlbnRzJyB9LFxuICBpbXBvcnRzOiBbXG4gICAgQ29yZU1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBDb2xsYXBzZU1vZHVsZSxcbiAgICBTdGF0aWNBc3NldHNGaWxlUGlja2VyQ29tcG9uZW50LFxuICAgIEVkaXRvckNvbXBvbmVudFxuICBdXG59KVxuZXhwb3J0IGNsYXNzIEJyYW5kaW5nRm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgZm9ybUdyb3VwOiBSZXR1cm5UeXBlPEJyYW5kaW5nRm9ybUNvbXBvbmVudFsnaW5pdEZvcm0nXT47XG4gIG1lc3NhZ2VCYW5uZXJIZWxwID0gZ2V0dGV4dChcbiAgICAnU3VwcG9ydHMgbWFya2Rvd24uIFVzZSB7eyBoZWFkZXJNYXJrIH19IGZvciBoZWFkZXJzLCB7eyBsaXN0TWFyayB9fSBmb3IgbGlzdHMsIHt7IGJvbGRNYXJrIH19IGZvciBib2xkLCB7eyBpdGFsaWNNYXJrIH19IGZvciBpdGFsaWMsIGFuZCB7eyBsaW5rTWFyayB9fSBmb3IgbGlua3MuJ1xuICApO1xuICBtZXNzYWdlQmFubmVySGVscFBhcmFtcyA9IHtcbiAgICBoZWFkZXJNYXJrOiAnYCNgJyxcbiAgICBsaXN0TWFyazogJ2AqYCcsXG4gICAgYm9sZE1hcms6ICdgKipgJyxcbiAgICBpdGFsaWNNYXJrOiAnYF9gJyxcbiAgICBsaW5rTWFyazogJ2BbXSgpYCdcbiAgfTtcbiAgcHJpdmF0ZSBvblRvdWNoZWQ6ICgpID0+IHZvaWQ7XG5cbiAgcHJpdmF0ZSBleHRlcm5hbFZhbHVlOiBCcmFuZGluZ09wdGlvbnNKc29uID0ge307XG4gIHByaXZhdGUgZm9ybUdyb3VwVmFsdWVDaGFuZ2VzJDogQnJhbmRpbmdGb3JtQ29tcG9uZW50Wydmb3JtR3JvdXAnXVsndmFsdWVDaGFuZ2VzJ107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSBtZXNzYWdlQmFubmVyU2VydmljZTogTWVzc2FnZUJhbm5lclNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5mb3JtR3JvdXAgPSB0aGlzLmluaXRGb3JtKCk7XG4gICAgdGhpcy5mb3JtR3JvdXBWYWx1ZUNoYW5nZXMkID0gdGhpcy5mb3JtR3JvdXAudmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpO1xuICB9XG5cbiAgd3JpdGVWYWx1ZShvYmo6IHN0cmluZyk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXJzZWRPYmogPSBKU09OLnBhcnNlKG9iaik7XG4gICAgICB0aGlzLmV4dGVybmFsVmFsdWUgPSBwYXJzZWRPYmo7XG4gICAgICB0aGlzLmFwcGx5U3RhdGVUb0Zvcm0ocGFyc2VkT2JqKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBmYWlsZWQgdG8gcGFyc2VcbiAgICB9XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMuZm9ybUdyb3VwVmFsdWVDaGFuZ2VzJC5zdWJzY3JpYmUodmFsdWUgPT4gZm4odGhpcy5jb252ZXJ0Rm9ybVRvU3RhdGUodmFsdWUpKSk7XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cblxuICBjb2NraWVCYW5uZXJDaGFuZ2UodG9nZ2xlU3RhdGU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5jb29raWVCYW5uZXIucGF0Y2hWYWx1ZSh7IGNvb2tpZUJhbm5lckRpc2FibGVkOiAhdG9nZ2xlU3RhdGUgfSk7XG4gIH1cblxuICBvbkJsdXIoKTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgfVxuXG4gIGluaXRGb3JtKCkge1xuICAgIHJldHVybiBjcmVhdGVHZW5lcmljQnJhbmRpbmdGb3JtKHRoaXMuZm9ybUJ1aWxkZXIpO1xuICB9XG5cbiAgYXBwbHlTdGF0ZVRvRm9ybShicmFuZGluZzogQnJhbmRpbmdPcHRpb25zSnNvbikge1xuICAgIGlmICghYnJhbmRpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IHRvQmVQYXRjaGVkID0gYnJhbmRpbmdGb3JtR3JvdXBUb3BMZXZlbEVudHJpZXMucmVkdWNlUmlnaHQoKHByZXYsIGN1cnIpID0+IHtcbiAgICAgIGlmIChicmFuZGluZ0Zvcm1Hcm91cFRvcExldmVsRW50cmllc1RvVW5wYWNrLmluY2x1ZGVzKGN1cnIgYXMgYW55KSkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihwcmV2LCB7IFtjdXJyXTogYnJhbmRpbmcgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihwcmV2LCB7IFtjdXJyXTogYnJhbmRpbmdbY3Vycl0gfSk7XG4gICAgfSwge30pO1xuXG4gICAgdG9CZVBhdGNoZWQgPSBPYmplY3Qua2V5cyh0aGlzLmZvcm1Hcm91cC5jb250cm9scylcbiAgICAgIC5maWx0ZXIoa2V5ID0+ICFicmFuZGluZ0Zvcm1Hcm91cFRvcExldmVsRW50cmllcy5pbmNsdWRlcyhrZXkgYXMgYW55KSlcbiAgICAgIC5yZWR1Y2VSaWdodCgocHJldiwgY3VycikgPT4ge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihwcmV2LCB7IFtjdXJyXTogYnJhbmRpbmcuYnJhbmRpbmdDc3NWYXJzIHx8IHt9IH0pO1xuICAgICAgfSwgdG9CZVBhdGNoZWQpO1xuICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUodG9CZVBhdGNoZWQpO1xuICB9XG5cbiAgY29udmVydEZvcm1Ub1N0YXRlKHZhbHVlOiBCcmFuZGluZ0Zvcm1Db21wb25lbnRbJ2Zvcm1Hcm91cCddWyd2YWx1ZSddKTogc3RyaW5nIHtcbiAgICBjb25zdCB0b3BMZXZlbDogVG9wTGV2ZWxWYWx1ZXMgPSBicmFuZGluZ0Zvcm1Hcm91cFRvcExldmVsRW50cmllcy5yZWR1Y2VSaWdodCgocHJldiwgY3VycikgPT4ge1xuICAgICAgaWYgKGJyYW5kaW5nRm9ybUdyb3VwVG9wTGV2ZWxFbnRyaWVzVG9VbnBhY2suaW5jbHVkZXMoY3VyciBhcyBhbnkpKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHByZXYsIHZhbHVlW2N1cnJdKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHByZXYsIHsgW2N1cnJdOiB2YWx1ZVtjdXJyXSB9KTtcbiAgICB9LCB7fSk7XG4gICAgY29uc3QgbmV3QnJhbmRpbmdDc3NWYXJzID0gT2JqZWN0LmVudHJpZXModmFsdWUpLnJlZHVjZVJpZ2h0KChwcmV2LCBba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgIGlmIChicmFuZGluZ0Zvcm1Hcm91cFRvcExldmVsRW50cmllcy5pbmNsdWRlcyhrZXkgYXMgYW55KSkge1xuICAgICAgICByZXR1cm4gcHJldjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHByZXYsIHZhbHVlKTtcbiAgICB9LCB7fSk7XG4gICAgY29uc3QgZXh0ZXJuYWxWYWx1ZTogQnJhbmRpbmdPcHRpb25zSnNvbiA9IGNsb25lRGVlcCh0aGlzLmV4dGVybmFsVmFsdWUgfHwge30pO1xuICAgIE9iamVjdC5hc3NpZ24oZXh0ZXJuYWxWYWx1ZSwgdG9wTGV2ZWwpO1xuICAgIGNvbnN0IGN1cnJlbnRDU1NWYXJzID0gZXh0ZXJuYWxWYWx1ZVsnYnJhbmRpbmdDc3NWYXJzJ10gfHwge307XG4gICAgY29uc3QgYXNzaWduZWROZXdWYWx1ZXMgPSBPYmplY3QuYXNzaWduKGN1cnJlbnRDU1NWYXJzLCBuZXdCcmFuZGluZ0Nzc1ZhcnMpO1xuICAgIGV4dGVybmFsVmFsdWVbJ2JyYW5kaW5nQ3NzVmFycyddID0gYXNzaWduZWROZXdWYWx1ZXM7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGV4dGVybmFsVmFsdWUsIG51bGwsIDIpO1xuICB9XG5cbiAgcHJldmlld0Jhbm5lcigpOiB2b2lkIHtcbiAgICB0aGlzLm1lc3NhZ2VCYW5uZXJTZXJ2aWNlLnNob3dCYW5uZXIoKTtcbiAgfVxufVxuIiwiPGRpdlxuICBjbGFzcz1cImlubmVyLXNjcm9sbFwiXG4gIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCJcbj5cbiAgPCEtLSAgVGl0bGUgJiBGYXZpY29uLS0+XG4gIDxkaXYgY2xhc3M9XCJjYXJkLWJsb2NrXCI+XG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy0xMiBjb2wtc20tMyBjb2wtbWQtMiBwLXQtMTZcIj5cbiAgICAgICAgPGg0IGNsYXNzPVwidGV4dC1ub3JtYWwgdGV4dC1yaWdodCB0ZXh0LWxlZnQteHMgbS1iLTE2XCI+XG4gICAgICAgICAge3sgJ1RpdGxlICYgZmF2aWNvbicgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9oND5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy0xMiBjb2wtc20tOSBjb2wtbWQtMTBcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwicm93IHAtdC0xNiBwLWItMTZcIlxuICAgICAgICAgIFtmb3JtR3JvdXBOYW1lXT1cIidnZW5lcmljQXBwbGljYXRpb25PcHRpb25zJ1wiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cbiAgICAgICAgICAgIDxjOHktZm9ybS1ncm91cCBjbGFzcz1cIm0tYi0zMlwiPlxuICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICBmb3I9XCJnbG9iYWxUaXRsZVwiXG4gICAgICAgICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBUaXRsZVxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgaWQ9XCJnbG9iYWxUaXRsZVwiXG4gICAgICAgICAgICAgICAgbmFtZT1cImdsb2JhbFRpdGxlXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZ2xvYmFsVGl0bGVcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8Yzh5LW1lc3NhZ2VzXG4gICAgICAgICAgICAgICAgW2hlbHBNZXNzYWdlXT1cIidUaXRsZSB0byBkaXNwbGF5IGluIHRoZSBicm93c2VyIHRhYicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICA+PC9jOHktbWVzc2FnZXM+XG4gICAgICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxuICAgICAgICAgICAgPGM4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgICAgICA8bGFiZWwgdHJhbnNsYXRlPkZhdmljb248L2xhYmVsPlxuICAgICAgICAgICAgICA8Yzh5LXN0YXRpYy1hc3NldHMtZmlsZS1waWNrZXJcbiAgICAgICAgICAgICAgICBuYW1lPVwiZmF2aWNvblVybFwiXG4gICAgICAgICAgICAgICAgW3N1cHBvcnRlZEZpbGVFeHRlbnNpb25zXT1cIlsnaWNvJ11cIlxuICAgICAgICAgICAgICAgIFtpc0NTU1VSTF09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZmF2aWNvblVybFwiXG4gICAgICAgICAgICAgID48L2M4eS1zdGF0aWMtYXNzZXRzLWZpbGUtcGlja2VyPlxuICAgICAgICAgICAgICA8Yzh5LW1lc3NhZ2VzIFtoZWxwTWVzc2FnZV09XCInU3VwcG9ydGVkIGZpbGVzOiAqLmljbydcIj48L2M4eS1tZXNzYWdlcz5cbiAgICAgICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJjYXJkLWJsb2NrIHNlcGFyYXRvci10b3BcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLXhzLTEyIGNvbC1zbS0zIGNvbC1tZC0yIHAtdC0xNlwiPlxuICAgICAgPGg0XG4gICAgICAgIGNsYXNzPVwidGV4dC1ub3JtYWwgdGV4dC1yaWdodCB0ZXh0LWxlZnQteHMgbS1iLTE2XCJcbiAgICAgICAgdHJhbnNsYXRlXG4gICAgICA+XG4gICAgICAgIERhcmsgdGhlbWVcbiAgICAgIDwvaDQ+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImNvbC14cy0xMiBjb2wtc20tOSBjb2wtbWQtMTBcIj5cbiAgICAgIDxjOHktZm9ybS1ncm91cCBjbGFzcz1cIm0tYi0zMiBwLXQtOCBtLXQtNFwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJjOHktc3dpdGNoXCI+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICBuYW1lPVwiZGFya1RoZW1lQXZhaWxhYmxlXCJcbiAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJkYXJrVGhlbWVBdmFpbGFibGVcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPHNwYW4+PC9zcGFuPlxuICAgICAgICAgIDxzcGFuIHRyYW5zbGF0ZT5FbmFibGUgZGFyayB0aGVtZSBzdXBwb3J0PC9zcGFuPlxuICAgICAgICA8L2xhYmVsPlxuICAgICAgPC9jOHktZm9ybS1ncm91cD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDwhLS0gVHlwb2dyYXBoeSAtLT5cbiAgPGRpdiBjbGFzcz1cImNhcmQtYmxvY2sgc2VwYXJhdG9yLXRvcFwiPlxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wteHMtMTIgY29sLXNtLTMgY29sLW1kLTIgcC10LTE2XCI+XG4gICAgICAgIDxoNFxuICAgICAgICAgIGNsYXNzPVwidGV4dC1ub3JtYWwgdGV4dC1yaWdodCB0ZXh0LWxlZnQteHMgbS1iLTE2XCJcbiAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgPlxuICAgICAgICAgIFR5cG9ncmFwaHlcbiAgICAgICAgPC9oND5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy0xMiBjb2wtc20tOSBjb2wtbWQtMTBcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxuICAgICAgICAgICAgPGZpZWxkc2V0XG4gICAgICAgICAgICAgIGNsYXNzPVwiYzh5LWZpZWxkc2V0IHAtMjRcIlxuICAgICAgICAgICAgICBbZm9ybUdyb3VwTmFtZV09XCInYmFzZVR5cG9ncmFwaHknXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGxlZ2VuZCB0cmFuc2xhdGU+QmFzZSB0eXBvZ3JhcGh5PC9sZWdlbmQ+XG4gICAgICAgICAgICAgIDxjOHktZm9ybS1ncm91cCBjbGFzcz1cIm0tYi0zMlwiPlxuICAgICAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgICAgZm9yPVwiZm9udC11cmxcIlxuICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgRm9udHMgVVJMXG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgIGlkPVwiZm9udC11cmxcIlxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7e1xuICAgICAgICAgICAgICAgICAgICAnZS5nLiB7eyBleGFtcGxlIH19JyB8IHRyYW5zbGF0ZSA6IHsgZXhhbXBsZTogJ2h0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzP2ZhbWlseT1Sb2JvdG86NDAwLDUwMCw3MDAnIH1cbiAgICAgICAgICAgICAgICAgIH19XCJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImZvbnQtdXJsXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxjOHktbWVzc2FnZXMgW2hlbHBNZXNzYWdlXT1cIidUaGUgR29vZ2xlIGZvbnRzIFVSTCcgfCB0cmFuc2xhdGVcIj48L2M4eS1tZXNzYWdlcz5cbiAgICAgICAgICAgICAgPC9jOHktZm9ybS1ncm91cD5cbiAgICAgICAgICAgICAgPGM4eS1mb3JtLWdyb3VwIGNsYXNzPVwibS1iLTMyXCI+XG4gICAgICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgICAgICB0aXRsZT1cImZvbnQtZmFtaWx5LWJhc2VcIlxuICAgICAgICAgICAgICAgICAgZm9yPVwiZm9udC1mYW1pbHktYmFzZVwiXG4gICAgICAgICAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICBCYXNlIGZvbnQgc3RhY2tcbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgaWQ9XCJmb250LWZhbWlseS1iYXNlXCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ2UuZy4ge3sgZXhhbXBsZSB9fScgfCB0cmFuc2xhdGUgOiB7ZXhhbXBsZTogJyZxdW90O1JvYm90byZxdW90OywgQXJpYWwsIHNhbnMtc2VyaWYnfSB9fVwiXG4gICAgICAgICAgICAgICAgICBuYW1lPVwiZm9udC1mYW1pbHktYmFzZVwiXG4gICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJmb250LWZhbWlseS1iYXNlXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxjOHktbWVzc2FnZXM+PC9jOHktbWVzc2FnZXM+XG4gICAgICAgICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxuICAgICAgICAgICAgPGZpZWxkc2V0XG4gICAgICAgICAgICAgIGNsYXNzPVwiYzh5LWZpZWxkc2V0IHAtMjRcIlxuICAgICAgICAgICAgICBbZm9ybUdyb3VwTmFtZV09XCInaGVhZGluZ3NBbmROYXZpZ2F0b3JUeXBvZ3JhcGh5J1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxsZWdlbmQ+e3sgJ0hlYWRpbmdzICYgbmF2aWdhdG9yJyB8IHRyYW5zbGF0ZSB9fTwvbGVnZW5kPlxuICAgICAgICAgICAgICA8Yzh5LWZvcm0tZ3JvdXAgY2xhc3M9XCJtLWItMzJcIj5cbiAgICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICAgIHRpdGxlPVwiZm9udC1mYW1pbHktaGVhZGluZ3NcIlxuICAgICAgICAgICAgICAgICAgZm9yPVwiZm9udC1mYW1pbHktaGVhZGluZ3NcIlxuICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgSGVhZGluZ3MgZm9udCBzdGFja1xuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICBpZD1cImZvbnQtZmFtaWx5LWhlYWRpbmdzXCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ2UuZy4ge3sgZXhhbXBsZSB9fScgfCB0cmFuc2xhdGUgOiB7ZXhhbXBsZTogJyZxdW90O1JvYm90byZxdW90OywgQXJpYWwsIHNhbnMtc2VyaWYnfSB9fVwiXG4gICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJmb250LWZhbWlseS1oZWFkaW5nc1wiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8Yzh5LW1lc3NhZ2VzXG4gICAgICAgICAgICAgICAgICBbaGVscE1lc3NhZ2VdPVwiXG4gICAgICAgICAgICAgICAgICAgICdMZWF2ZSBlbXB0eSB0byB1c2UgdGhlIHNhbWUgZm9udCBhcyB0aGUgYmFzZSBmb250IHN0YWNrJyB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+PC9jOHktbWVzc2FnZXM+XG4gICAgICAgICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgICAgIDxjOHktZm9ybS1ncm91cCBjbGFzcz1cIm0tYi0zMlwiPlxuICAgICAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgICAgdGl0bGU9XCJuYXZpZ2F0b3ItZm9udC1mYW1pbHlcIlxuICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgTmF2aWdhdG9yIGZvbnQgc3RhY2tcbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNvbnRyb2wtc3RhdGljXCI+XG4gICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjOHktcmFkaW8gcmFkaW8taW5saW5lXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJuYXZpZ2F0b3ItZm9udC1mYW1pbHlcIlxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibmF2aWdhdG9yLWZvbnQtZmFtaWx5XCJcbiAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiJ3ZhcigtLWZvbnQtZmFtaWx5LWJhc2UpJ1wiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gdHJhbnNsYXRlPk1hdGNoIGJhc2UgZm9udCBzdGFjazwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjOHktcmFkaW8gcmFkaW8taW5saW5lXCJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJSYWRpbyBUd29cIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwibmF2aWdhdG9yLWZvbnQtZmFtaWx5XCJcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm5hdmlnYXRvci1mb250LWZhbWlseVwiXG4gICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIid2YXIoLS1mb250LWZhbWlseS1oZWFkaW5ncyknXCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiB0cmFuc2xhdGU+TWF0Y2ggaGVhZGluZ3MgZm9udCBzdGFjazwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPCEtLSBDb29raWUgYmFubmVyIC0tPlxuICA8ZGl2IGNsYXNzPVwiY2FyZC1ibG9jayBzZXBhcmF0b3ItdG9wXCI+XG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy0xMiBjb2wtc20tMyBjb2wtbWQtMiBwLXQtMTZcIj5cbiAgICAgICAgPGg0XG4gICAgICAgICAgY2xhc3M9XCJ0ZXh0LW5vcm1hbCB0ZXh0LXJpZ2h0IHRleHQtbGVmdC14cyBtLWItMTZcIlxuICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICA+XG4gICAgICAgICAgQ29va2llIGJhbm5lclxuICAgICAgICA8L2g0PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLXhzLTEyIGNvbC1zbS05IGNvbC1tZC0xMFwiPlxuICAgICAgICA8ZmllbGRzZXRcbiAgICAgICAgICBjbGFzcz1cImM4eS1maWVsZHNldCBwLTI0XCJcbiAgICAgICAgICBbZm9ybUdyb3VwTmFtZV09XCInY29va2llQmFubmVyJ1wiXG4gICAgICAgID5cbiAgICAgICAgICA8bGVnZW5kIHRyYW5zbGF0ZT5Db29raWUgYmFubmVyPC9sZWdlbmQ+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYzh5LXN3aXRjaFwiPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgbmFtZT1cImNvb2tpZUJhbm5lckVuYWJsZWRcIlxuICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICBbbmdNb2RlbE9wdGlvbnNdPVwieyBzdGFuZGFsb25lOiB0cnVlIH1cIlxuICAgICAgICAgICAgICBbbmdNb2RlbF09XCIhZm9ybUdyb3VwLnZhbHVlLmNvb2tpZUJhbm5lci5jb29raWVCYW5uZXJEaXNhYmxlZFwiXG4gICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNvY2tpZUJhbm5lckNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8c3Bhbj48L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiB0cmFuc2xhdGU+RW5hYmxlIGNvb2tpZSBiYW5uZXI8L3NwYW4+XG4gICAgICAgICAgPC9sYWJlbD5cblxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiY29sbGFwc2VcIlxuICAgICAgICAgICAgW2NvbGxhcHNlXT1cImZvcm1Hcm91cC52YWx1ZS5jb29raWVCYW5uZXIuY29va2llQmFubmVyRGlzYWJsZWRcIlxuICAgICAgICAgICAgW2lzQW5pbWF0ZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cInJvd1wiXG4gICAgICAgICAgICAgIHN0eWxlPVwibWluLWhlaWdodDogMjI3cHhcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZm9ybUdyb3VwLnZhbHVlLmNvb2tpZUJhbm5lci5jb29raWVCYW5uZXJEaXNhYmxlZCAhPT0gdHJ1ZVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxuICAgICAgICAgICAgICAgICAgPGM4eS1mb3JtLWdyb3VwIGNsYXNzPVwibS1iLTMyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgICAgICAgIGZvcj1cImNvb2tpZUJhbm5lclRpdGxlXCJcbiAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIFRpdGxlXG4gICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgICBpZD1cImNvb2tpZUJhbm5lclRpdGxlXCJcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiY29va2llQmFubmVyVGl0bGVcIlxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJjb29raWVCYW5uZXJUaXRsZVwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDxjOHktbWVzc2FnZXM+PC9jOHktbWVzc2FnZXM+XG4gICAgICAgICAgICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgICAgICAgICAgPGM4eS1mb3JtLWdyb3VwIGNsYXNzPVwibS1iLTMyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgICAgICAgIGZvcj1cInBvbGljeVVybFwiXG4gICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICBMaW5rIHRvIHByaXZhY3kgcG9saWN5XG4gICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgICBpZD1cInBvbGljeVVybFwiXG4gICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInBvbGljeVVybFwiXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInBvbGljeVVybFwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDxjOHktbWVzc2FnZXM+PC9jOHktbWVzc2FnZXM+XG4gICAgICAgICAgICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgICAgICAgICAgPGM4eS1mb3JtLWdyb3VwIGNsYXNzPVwibS1iLTMyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgICAgICAgIGZvcj1cInBvbGljeVZlcnNpb25cIlxuICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiBvZiBwcml2YWN5IHBvbGljeVxuICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgaWQ9XCJwb2xpY3lWZXJzaW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwicG9saWN5VmVyc2lvblwiXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInBvbGljeVZlcnNpb25cIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8Yzh5LW1lc3NhZ2VzXG4gICAgICAgICAgICAgICAgICAgICAgW2hlbHBNZXNzYWdlXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgJ0NoYW5naW5nIHRoZSB2ZXJzaW9uIG9mIHRoZSBwcml2YWN5IHBvbGljeSBpbnZhbGlkYXRlcyBhbHJlYWR5IGV4aXN0aW5nIGNvb2tpZSBjb25zZW50cy4nXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvYzh5LW1lc3NhZ2VzPlxuICAgICAgICAgICAgICAgICAgPC9jOHktZm9ybS1ncm91cD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxuICAgICAgICAgICAgICAgICAgPGM4eS1mb3JtLWdyb3VwIGNsYXNzPVwibS1iLTMyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgICAgICAgIGZvcj1cImNvb2tpZUJhbm5lclRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgVGV4dFxuICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWFcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgaWQ9XCJjb29raWVCYW5uZXJUZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiY29va2llQmFubmVyVGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgcm93cz1cIjhcIlxuICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImNvb2tpZUJhbm5lclRleHRcIlxuICAgICAgICAgICAgICAgICAgICA+PC90ZXh0YXJlYT5cbiAgICAgICAgICAgICAgICAgICAgPGM4eS1tZXNzYWdlcz48L2M4eS1tZXNzYWdlcz5cbiAgICAgICAgICAgICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZmllbGRzZXQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDwhLS0gTWVzc2FnZSBiYW5uZXIgLS0+XG4gIDxkaXYgY2xhc3M9XCJjYXJkLWJsb2NrIHNlcGFyYXRvci10b3BcIj5cbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLXhzLTEyIGNvbC1zbS0zIGNvbC1tZC0yIHAtdC0xNlwiPlxuICAgICAgICA8aDRcbiAgICAgICAgICBjbGFzcz1cInRleHQtbm9ybWFsIHRleHQtcmlnaHQgdGV4dC1sZWZ0LXhzIG0tYi0xNlwiXG4gICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgID5cbiAgICAgICAgICBNZXNzYWdlIGJhbm5lclxuICAgICAgICA8L2g0PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wteHMtMTIgY29sLXNtLTkgY29sLW1kLTEwXCI+XG4gICAgICAgIDxmaWVsZHNldFxuICAgICAgICAgIGNsYXNzPVwiYzh5LWZpZWxkc2V0IHAtMjRcIlxuICAgICAgICAgIFtmb3JtR3JvdXBOYW1lXT1cIidtZXNzYWdlQmFubmVyJ1wiXG4gICAgICAgID5cbiAgICAgICAgICA8bGVnZW5kIHRyYW5zbGF0ZT5NZXNzYWdlIGJhbm5lcjwvbGVnZW5kPlxuXG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYzh5LXN3aXRjaFwiPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgbmFtZT1cIm1lc3NhZ2VCYW5uZXJFbmFibGVkXCJcbiAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibWVzc2FnZUJhbm5lckVuYWJsZWRcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIHRyYW5zbGF0ZT5FbmFibGUgbWVzc2FnZSBiYW5uZXI8L3NwYW4+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImNvbGxhcHNlXCJcbiAgICAgICAgICAgIFtjb2xsYXBzZV09XCIhZm9ybUdyb3VwLnZhbHVlLm1lc3NhZ2VCYW5uZXIubWVzc2FnZUJhbm5lckVuYWJsZWRcIlxuICAgICAgICAgICAgW2lzQW5pbWF0ZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhLWktY2VudGVyIGdhcC04IHAtdC0xNiBwLWItMTZcIj5cbiAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPVwiYzh5LWZpZWxkc2V0IHAtMTZcIj5cbiAgICAgICAgICAgICAgICA8bGVnZW5kPnt7ICdNZXNzYWdlIHR5cGUnIHwgdHJhbnNsYXRlIH19PC9sZWdlbmQ+XG4gICAgICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImM4eS1yYWRpbyByYWRpby1pbmxpbmVcIlxuICAgICAgICAgICAgICAgICAgdGl0bGU9XCJ7eyAnSW5mbycgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT1cImluZm9cIlxuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJtZXNzYWdlQmFubmVyVHlwZVwiXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkLWZsZXggYS1pLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1pbmZvIGljb24tMTYgbS1yLTRcIlxuICAgICAgICAgICAgICAgICAgICAgIGM4eUljb249XCJpbmZvLWNpcmNsZVwiXG4gICAgICAgICAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgICAgICAgICAgIEluZm9cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjOHktcmFkaW8gcmFkaW8taW5saW5lXCJcbiAgICAgICAgICAgICAgICAgIHRpdGxlPVwie3sgJ1dhcm5pbmcnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCJ3YXJuaW5nXCJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibWVzc2FnZUJhbm5lclR5cGVcIlxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZC1mbGV4IGEtaS1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtd2FybmluZyBpY29uLTE2IG0tci00XCJcbiAgICAgICAgICAgICAgICAgICAgICBjOHlJY29uPVwid2FybmluZ1wiXG4gICAgICAgICAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgICAgICAgICAgIHt7ICdXYXJuaW5nJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImM4eS1yYWRpbyByYWRpby1pbmxpbmVcIlxuICAgICAgICAgICAgICAgICAgdGl0bGU9XCJ7eyAnRGFuZ2VyJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPVwiZGFuZ2VyXCJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibWVzc2FnZUJhbm5lclR5cGVcIlxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZC1mbGV4IGEtaS1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtZGFuZ2VyIGljb24tMTYgbS1yLTRcIlxuICAgICAgICAgICAgICAgICAgICAgIGM4eUljb249XCJleGNsYW1hdGlvbi1jaXJjbGVcIlxuICAgICAgICAgICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAgICAgICAgICB7eyAnRGFuZ2VyJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImM4eS1yYWRpbyByYWRpby1pbmxpbmVcIlxuICAgICAgICAgICAgICAgICAgdGl0bGU9XCJ7eyAnU3VjY2VzcycgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT1cInN1Y2Nlc3NcIlxuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJtZXNzYWdlQmFubmVyVHlwZVwiXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkLWZsZXggYS1pLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1zdWNjZXNzIGljb24tMTYgbS1yLTRcIlxuICAgICAgICAgICAgICAgICAgICAgIGM4eUljb249XCJjaGVjay1jaXJjbGVcIlxuICAgICAgICAgICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAgICAgICAgICB7eyAnU3VjY2VzcycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjOHktcmFkaW8gcmFkaW8taW5saW5lXCJcbiAgICAgICAgICAgICAgICAgIHRpdGxlPVwie3sgJ1N5c3RlbScgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT1cInN5c3RlbVwiXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm1lc3NhZ2VCYW5uZXJUeXBlXCJcbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtcHJpbWFyeSBpY29uLTE2IG0tcjRcIlxuICAgICAgICAgICAgICAgICAgICAgIGM4eUljb249XCJ3cmVuY2hcIlxuICAgICAgICAgICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAgICAgICAgICB7eyAnU3lzdGVtJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgIDwvZmllbGRzZXQ+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGM4eS1mb3JtLWdyb3VwXG4gICAgICAgICAgICAgIGNsYXNzPVwibS1iLTMyIHAtYi0zMlwiXG4gICAgICAgICAgICAgIFtzdHlsZV09XCJ7IGhlaWdodDogJzMwMHB4JyB9XCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJmb3JtR3JvdXAudmFsdWUubWVzc2FnZUJhbm5lci5tZXNzYWdlQmFubmVyRW5hYmxlZFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgIGZvcj1cIm1lc3NhZ2VCYW5uZXJDb250ZW50XCJcbiAgICAgICAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIE1lc3NhZ2UgY29udGVudFxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICA8Yzh5LWVkaXRvclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleC1ncm93IGZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgc3R5bGU9XCJoZWlnaHQ6IDEwMCVcIlxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm1lc3NhZ2VCYW5uZXJDb250ZW50XCJcbiAgICAgICAgICAgICAgICBbZWRpdG9yT3B0aW9uc109XCJ7bGFuZ3VhZ2U6ICdtYXJrZG93bid9XCJcbiAgICAgICAgICAgICAgICBtb25hY29FZGl0b3JNYXJrZXJWYWxpZGF0b3JcbiAgICAgICAgICAgICAgPjwvYzh5LWVkaXRvcj5cbiAgICAgICAgICAgICAgPGM4eS1tZXNzYWdlc1xuICAgICAgICAgICAgICAgIFtoZWxwTWVzc2FnZV09XCJtZXNzYWdlQmFubmVySGVscCB8IHRyYW5zbGF0ZTogbWVzc2FnZUJhbm5lckhlbHBQYXJhbXNcIlxuICAgICAgICAgICAgICA+PC9jOHktbWVzc2FnZXM+XG4gICAgICAgICAgICAgIDxjOHktbWVzc2FnZXM+PC9jOHktbWVzc2FnZXM+XG4gICAgICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuXG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0XCJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJwcmV2aWV3QmFubmVyKClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgIGNsYXNzPVwibS1yLTRcIlxuICAgICAgICAgICAgICAgIGM4eUljb249XCJleWVcIlxuICAgICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAgICA8c3BhbiB0cmFuc2xhdGU+UHJldmlldyBiYW5uZXI8L3NwYW4+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9maWVsZHNldD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
@@ -128,13 +128,15 @@ export class TranslateService {
128
128
  return this.getQueryParameter('lang');
129
129
  }
130
130
  parseLocaleCode(localeCode, outputSeparator = '_') {
131
- const matches = localeCode.match(/^([a-z]{2})([_-]([a-z]{2}))?$/i);
131
+ // - 2 letter language code
132
+ // - optional region code that's either 2 letters OR 3 digits
133
+ const matches = localeCode.match(/^([a-z]{2})([_-]([a-z]{2}|[0-9]{3}))?$/i);
132
134
  if (!matches) {
133
- throw new Error(`Could not parse locale code "${localeCode}", make sure it's a two- or four-letter code (case insensitive) separated with "_" or "-".`);
135
+ throw new Error(`Could not parse locale code "${localeCode}". Expected format: language code (2 letters) optionally followed by region code (2 letters or 3 digits) separated with "_" or "-", e.g. "en-US" or "es-419".`);
134
136
  }
135
137
  const langCode = matches[1].toLowerCase();
136
- const countryCode = matches[3]?.toUpperCase();
137
- const langCountryCode = `${langCode}${countryCode ? `${outputSeparator}${countryCode}` : ''}`;
138
+ const regionCode = matches[3]?.toUpperCase();
139
+ const langCountryCode = `${langCode}${regionCode ? `${outputSeparator}${regionCode}` : ''}`;
138
140
  return { langCode, langCountryCode };
139
141
  }
140
142
  /**
@@ -259,4 +261,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
259
261
  }] }, { type: i4.BsLocaleService, decorators: [{
260
262
  type: Optional
261
263
  }] }] });
262
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL2kxOG4vdHJhbnNsYXRlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQUUsZ0JBQWdCLElBQUksbUJBQW1CLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM5RSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUNMLFlBQVksRUFDWixRQUFRLEVBQ1IsVUFBVSxFQUNWLFFBQVEsRUFDUixRQUFRLEVBQ1IsUUFBUSxFQUNSLFFBQVEsRUFDUixRQUFRLEVBQ1IsUUFBUSxFQUNSLFVBQVUsRUFDVixVQUFVLEVBQ1gsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7Ozs7OztBQUUzRDs7R0FFRztBQUlILE1BQU0sT0FBTyxnQkFBZ0I7YUFDcEIsc0JBQWlCLEdBQUcsY0FBYyxBQUFqQixDQUFrQjtJQUMxQyxNQUFNLENBQUMsV0FBVztRQUNoQixPQUFPLE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDekUsQ0FBQztJQUtELFlBQ1UsWUFBaUMsRUFDakMsRUFBbUIsRUFDbkIsT0FBdUIsRUFDTCxRQUFrQixFQUN4QixlQUFnQztRQUo1QyxpQkFBWSxHQUFaLFlBQVksQ0FBcUI7UUFDakMsT0FBRSxHQUFGLEVBQUUsQ0FBaUI7UUFDbkIsWUFBTyxHQUFQLE9BQU8sQ0FBZ0I7UUFDTCxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ3hCLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQVR0RCxnQkFBVyxHQUFRLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNyRCxVQUFLLEdBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0Qsc0JBQWlCLEdBQUcsR0FBRyxDQUFDO1FBUzlCLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUMvQyxJQUFJLGVBQWUsRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUMzQyxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLGdCQUFnQixDQUFDLFVBQWtCO1FBQ3ZDLE1BQU0sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxxQkFBcUIsRUFBRSxHQUN2RSxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUM7WUFDSCxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDeEMsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWCxJQUFJLHFCQUFxQixLQUFLLGFBQWEsRUFBRSxDQUFDO2dCQUM1QyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMscUJBQXFCLENBQUMsQ0FBQztZQUNoRCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sTUFBTSxDQUFDLENBQUM7WUFDVixDQUFDO1FBQ0gsQ0FBQztRQUVELE1BQU0sRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxzQkFBc0IsRUFBRSxHQUN2RSxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVyxDQUFDLFVBQVU7UUFDMUIsTUFBTSxNQUFNLEdBQVEsTUFBTSxVQUFVLENBQUMsK0JBQStCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUNsRixrQkFBa0IsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELFdBQVcsQ0FBQyxJQUFZO1FBQ3RCLElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDNUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUN6QyxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDbEQsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQzVDLENBQUM7SUFFRDs7T0FFRztJQUNILHNCQUFzQjtRQUNwQixNQUFNLFNBQVMsR0FBRyxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQzthQUNoRSxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7YUFDN0MsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQzthQUMzQixNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNkLE1BQU0sQ0FBQyxPQUFPLENBQUM7YUFDZixHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUVuQyxNQUFNLGlCQUFpQixHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDMUUsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVEOzs7T0FHRztJQUNILHVCQUF1QixDQUFDLElBQVk7UUFDbEMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUM7UUFDbEUsTUFBTSxDQUFDLFFBQVEsRUFBRSxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pELE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNoRixPQUFPLEdBQUcsUUFBUSxHQUFHLFFBQVEsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsaUJBQWlCLENBQUMsSUFBWTtRQUM1QixNQUFNLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3RELE9BQU8sUUFBUSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUM7SUFDckMsQ0FBQztJQUVELGtCQUFrQixDQUFDLElBQVk7UUFDN0IsTUFBTSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVELFlBQVksQ0FBQyxVQUFrQjtRQUM3QixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDaEIsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztRQUNELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMxRCxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzdFLE1BQU0sb0JBQW9CLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxDQUNqRCxDQUFDLEVBQUUsZUFBZSxFQUFFLEVBQUUsRUFBRSxDQUFDLGVBQWUsS0FBSyxnQkFBZ0IsQ0FBQyxlQUFlLENBQzlFLENBQUM7UUFDRixJQUFJLG9CQUFvQixFQUFFLENBQUM7WUFDekIsT0FBTyxvQkFBb0IsQ0FBQyxlQUFlLENBQUM7UUFDOUMsQ0FBQztRQUNELE1BQU0sYUFBYSxHQUFHLGlCQUFpQixDQUFDLElBQUksQ0FDMUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsQ0FBQyxRQUFRLEtBQUssZ0JBQWdCLENBQUMsUUFBUSxDQUN6RCxDQUFDO1FBQ0YsSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUNsQixPQUFPLGFBQWEsQ0FBQyxlQUFlLENBQUM7UUFDdkMsQ0FBQztRQUNELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRDs7O09BR0c7SUFDSCxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVPLGVBQWUsQ0FDckIsVUFBa0IsRUFDbEIsZUFBZSxHQUFHLEdBQUc7UUFFckIsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1FBQ25FLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNiLE1BQU0sSUFBSSxLQUFLLENBQ2IsZ0NBQWdDLFVBQVUsNEZBQTRGLENBQ3ZJLENBQUM7UUFDSixDQUFDO1FBQ0QsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzFDLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUM5QyxNQUFNLGVBQWUsR0FBRyxHQUFHLFFBQVEsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsZUFBZSxHQUFHLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUM5RixPQUFPLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7O09BR0c7SUFDSyxnQkFBZ0I7UUFDdEIsT0FBTyxNQUFNLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFRDs7O09BR0c7SUFDSyxZQUFZO1FBQ2xCLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxNQUFNLENBQUM7UUFDN0IsTUFBTSwyQkFBMkIsR0FBRztZQUNsQyxXQUFXO1lBQ1gsVUFBVTtZQUNWLGlCQUFpQjtZQUNqQixnQkFBZ0I7WUFDaEIsY0FBYztTQUNmLENBQUM7UUFDRixPQUFPLDJCQUEyQixDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsRUFBRTtZQUNoRSxNQUFNLGlCQUFpQixHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM5QyxJQUFJLE9BQU8saUJBQWlCLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQzFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUNwQyxDQUFDO2lCQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUM7Z0JBQzVDLFNBQVMsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDbEQsQ0FBQztZQUNELE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNULENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxRQUFRO1FBQ2hDLDJFQUEyRTtRQUMzRSxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEQsSUFBSSxNQUFNLENBQUM7UUFDWCxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUMzQixNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDckMsSUFBSSxHQUFHLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQ3JCLE1BQU0sR0FBRyxLQUFLLENBQUM7WUFDakIsQ0FBQztZQUNELE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxXQUFXLENBQUMsSUFBSTtRQUN0QixRQUFRLElBQUksRUFBRSxDQUFDO1lBQ2IsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUNWLFlBQVksQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUMvQixNQUFNO1lBQ1IsQ0FBQztZQUNELEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDVixpRkFBaUY7Z0JBQ2pGLFlBQVksQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUM7Z0JBQ2xDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNsQyxNQUFNO1lBQ1IsQ0FBQztZQUNELEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDVixZQUFZLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUM3QixJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDL0IsTUFBTTtZQUNSLENBQUM7WUFDRCxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUM7Z0JBQ1YsWUFBWSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFDN0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQy9CLE1BQU07WUFDUixDQUFDO1lBQ0QsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUNWLFlBQVksQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUMvQixNQUFNO1lBQ1IsQ0FBQztZQUNELEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDVixZQUFZLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUM3QixJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDL0IsTUFBTTtZQUNSLENBQUM7WUFDRCxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUM7Z0JBQ1YsWUFBWSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFDN0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQy9CLE1BQU07WUFDUixDQUFDO1lBQ0QsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUNWLFlBQVksQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUMvQixNQUFNO1lBQ1IsQ0FBQztZQUNELEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDVixZQUFZLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO2dCQUMvQixJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDL0IsTUFBTTtZQUNSLENBQUM7WUFDRCxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUM7Z0JBQ1YsWUFBWSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztnQkFDL0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQy9CLE1BQU07WUFDUixDQUFDO1lBQ0QsT0FBTyxDQUFDLENBQUMsQ0FBQztnQkFDUixZQUFZLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDO2dCQUNsQyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNwQyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7OEdBL1BVLGdCQUFnQiwrR0FhakIsUUFBUTtrSEFiUCxnQkFBZ0IsY0FGZixNQUFNOzsyRkFFUCxnQkFBZ0I7a0JBSDVCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFjSSxNQUFNOzJCQUFDLFFBQVE7OzBCQUNmLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBET0NVTUVOVCwgcmVnaXN0ZXJMb2NhbGVEYXRhIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgYXMgTmd4VHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsga2V5cyB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBPcHRpb25zU2VydmljZSB9IGZyb20gJy4uL2NvbW1vbi9vcHRpb25zLnNlcnZpY2UnO1xuaW1wb3J0IHsgQXBwU3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vY29tbW9uL3VpLXN0YXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgZ2V0QW5ndWxhckxvY2FsZXNMYW5ndWFnZVN0cmluZyB9IGZyb20gJy4vaTE4bi5tb2R1bGUnO1xuaW1wb3J0IHsgbG9hZExvY2FsZSB9IGZyb20gJy4vbG9hZC1sb2NhbGUnO1xuaW1wb3J0IHtcbiAgZGVmaW5lTG9jYWxlLFxuICBkZUxvY2FsZSxcbiAgZW5HYkxvY2FsZSxcbiAgZXNMb2NhbGUsXG4gIGZyTG9jYWxlLFxuICBqYUxvY2FsZSxcbiAga29Mb2NhbGUsXG4gIG5sTG9jYWxlLFxuICBwbExvY2FsZSxcbiAgcHRCckxvY2FsZSxcbiAgemhDbkxvY2FsZVxufSBmcm9tICduZ3gtYm9vdHN0cmFwL2Nocm9ub3MnO1xuaW1wb3J0IHsgQnNMb2NhbGVTZXJ2aWNlIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9kYXRlcGlja2VyJztcblxuLyoqXG4gKiBBIHNlcnZpY2UgdG8gbWFuYWdlIHRoZSBsYW5ndWFnZSBvZiB0aGUgYXBwbGljYXRpb24uXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFRyYW5zbGF0ZVNlcnZpY2Uge1xuICBzdGF0aWMgU0FWRV9MQU5HVUFHRV9LRVkgPSAnYzh5X2xhbmd1YWdlJztcbiAgc3RhdGljIGRlZmF1bHRMYW5nKCkge1xuICAgIHJldHVybiB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oVHJhbnNsYXRlU2VydmljZS5TQVZFX0xBTkdVQUdFX0tFWSk7XG4gIH1cbiAgbGFuZ3NEZXRhaWw6IGFueSA9IHRoaXMub3B0aW9ucy5nZXQoJ2xhbmd1YWdlcycsIHt9KTtcbiAgbGFuZ3M6IGFueSA9IGtleXModGhpcy5sYW5nc0RldGFpbCkuZmlsdGVyKGsgPT4gdGhpcy5sYW5nc0RldGFpbFtrXSk7XG4gIHByaXZhdGUgREVGQVVMVF9TRVBBUkFUT1IgPSAnXyc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBuZ3hUcmFuc2xhdGU6IE5neFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB1aTogQXBwU3RhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgb3B0aW9uczogT3B0aW9uc1NlcnZpY2UsXG4gICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudDogRG9jdW1lbnQsXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBic0xvY2FsZVNlcnZpY2U6IEJzTG9jYWxlU2VydmljZVxuICApIHtcbiAgICBjb25zdCBxdWVyeVN0cmluZ0xhbmcgPSB0aGlzLnF1ZXJ5U3RyaW5nTGFuZygpO1xuICAgIGlmIChxdWVyeVN0cmluZ0xhbmcpIHtcbiAgICAgIHRoaXMuc2F2ZUluTG9jYWxTdG9yYWdlKHF1ZXJ5U3RyaW5nTGFuZyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFN3aXRjaGVzIHRoZSBhcHAgdG8gZ2l2ZW4gbG9jYWxlIChpbmNsLiBBbmd1bGFyLCBCb290c3RyYXAsIHRyYW5zbGF0aW9ucykuXG4gICAqIEBwYXJhbSBsb2NhbGVDb2RlIFRoZSBsb2NhbGUgY29kZS4gU3VwcG9ydGVkIGZvcm1hdHM6XG4gICAqIC0gdHdvLWxldHRlciBjb2RlcyBmb3IgbGFuZ3VhZ2Ugb25seSwgZm9yIGV4YW1wbGU6IGBlbmAsIGBkZWBcbiAgICogLSBmb3VyLWxldHRlciBjb2RlcyBmb3IgbGFuZ3VhZ2UgYW5kIGNvdW50cnksIHNlcGFyYXRlZCB3aXRoIHVuZGVyc2NvcmUgb3IgZGFzaCwgZm9yIGV4YW1wbGU6IGB6aF9DTmAsIGB6aF9jbmAsIGB6aC1DTmAsIGB6aC1jbmBcbiAgICovXG4gIGFzeW5jIHN3aXRjaFRvTGFuZ3VhZ2UobG9jYWxlQ29kZTogc3RyaW5nKSB7XG4gICAgY29uc3QgeyBsYW5nQ291bnRyeUNvZGU6IG5neExvY2FsZUNvZGUsIGxhbmdDb2RlOiBuZ3hMb2NhbGVDb2RlRmFsbGJhY2sgfSA9XG4gICAgICB0aGlzLnBhcnNlTG9jYWxlQ29kZShsb2NhbGVDb2RlLCAnLScpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmxvYWRMb2NhbGVzKG5neExvY2FsZUNvZGUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChuZ3hMb2NhbGVDb2RlRmFsbGJhY2sgIT09IG5neExvY2FsZUNvZGUpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTG9jYWxlcyhuZ3hMb2NhbGVDb2RlRmFsbGJhY2spO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB7IGxhbmdDb2RlOiBic0xvY2FsZUNvZGUsIGxhbmdDb3VudHJ5Q29kZTogbmd4VHJhbnNsYXRlTG9jYWxlQ29kZSB9ID1cbiAgICAgIHRoaXMucGFyc2VMb2NhbGVDb2RlKGxvY2FsZUNvZGUpO1xuICAgIHRoaXMuc2V0QnNMb2NhbGUoYnNMb2NhbGVDb2RlKTtcbiAgICB0aGlzLnNldExhbmd1YWdlKG5neFRyYW5zbGF0ZUxvY2FsZUNvZGUpO1xuICB9XG5cbiAgYXN5bmMgbG9hZExvY2FsZXMobW9kdWxlTGFuZykge1xuICAgIGNvbnN0IG1vZHVsZTogYW55ID0gYXdhaXQgbG9hZExvY2FsZShnZXRBbmd1bGFyTG9jYWxlc0xhbmd1YWdlU3RyaW5nKG1vZHVsZUxhbmcpKTtcbiAgICByZWdpc3RlckxvY2FsZURhdGEobW9kdWxlLmRlZmF1bHQpO1xuICB9XG5cbiAgc2V0TGFuZ3VhZ2UobGFuZzogc3RyaW5nKSB7XG4gICAgdGhpcy5uZ3hUcmFuc2xhdGUuc2V0RGVmYXVsdExhbmcodGhpcy5vcHRpb25zLmdldCgnZGVmYXVsdExhbmd1YWdlJywgJ2VuJykpO1xuICAgIHRoaXMubmd4VHJhbnNsYXRlLnVzZShsYW5nKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy51aS5zdGF0ZSQubmV4dCh7IC4uLnRoaXMudWkuc3RhdGUsIGxhbmcgfSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5sYW5nID0gbGFuZztcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kcyB0aGUgZmlyc3Qgc3VwcG9ydGVkIGxhbmd1YWdlXG4gICAqL1xuICBmaXJzdFN1cHBvcnRlZExhbmd1YWdlKCkge1xuICAgIGNvbnN0IGxhbmd1YWdlcyA9IFt0aGlzLnF1ZXJ5U3RyaW5nTGFuZygpLCB0aGlzLmxvY2FsU3RvcmFnZUxhbmcoKV1cbiAgICAgIC5jb25jYXQoW3RoaXMub3B0aW9ucy5nZXQoJ2RlZmF1bHRMYW5ndWFnZScpXSlcbiAgICAgIC5jb25jYXQodGhpcy5icm93c2VyTGFuZ3MoKSlcbiAgICAgIC5jb25jYXQoWydlbiddKVxuICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgLm1hcChsYW5nID0+IGxhbmcudG9Mb3dlckNhc2UoKSk7XG5cbiAgICBjb25zdCBwcmVmZXJyZWRMYW5ndWFnZSA9IGxhbmd1YWdlcy5maW5kKGxhbmcgPT4gdGhpcy5nZXRTdXBwb3J0ZWQobGFuZykpO1xuICAgIHJldHVybiB0aGlzLmdldFN1cHBvcnRlZChwcmVmZXJyZWRMYW5ndWFnZSk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgYSBpc28gbGFuZ3VhZ2UgY29kZSB0byBhIFBPIGxhbmd1YWdlIGNvZGUgKGUuZy4gZGUtZGUgZ2V0cyBkZV9kZSkuXG4gICAqIEBwYXJhbSBsYW5nIFRoZSBpc28gbGFuZ3VhZ2UgY29kZS5cbiAgICovXG4gIGNvbnZlcnRUb0xhbmd1YWdlQ29kZVBPKGxhbmc6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3Qgc2VwID0gbGFuZy5pbmRleE9mKCctJykgPiAtMSA/ICctJyA6IHRoaXMuREVGQVVMVF9TRVBBUkFUT1I7XG4gICAgY29uc3QgW2xhbmdNYWluLCBsYW5nU3BlY2lmaWNdID0gbGFuZy5zcGxpdChzZXApO1xuICAgIGNvbnN0IGxhbmdMYXN0ID0gbGFuZ1NwZWNpZmljID8gYCR7dGhpcy5ERUZBVUxUX1NFUEFSQVRPUn0ke2xhbmdTcGVjaWZpY31gIDogJyc7XG4gICAgcmV0dXJuIGAke2xhbmdNYWlufSR7bGFuZ0xhc3R9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBsYW5ndWFnZSBpbiB0aGUgbmF0aXZlIGxhbmd1YWdlLlxuICAgKiBAcGFyYW0gbGFuZyBUaGUgbGFuZ3VhZ2UgdHdvLWxldHRlciBjb2RlLlxuICAgKiBAcmV0dXJuIFRoZSBuYXRpdmUgbmFtZS5cbiAgICovXG4gIGdldE5hdGl2ZUxhbmd1YWdlKGxhbmc6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgbGFuZ0RhdGEgPSAodGhpcy5sYW5nc0RldGFpbCB8fCB7fSlbbGFuZ10gfHwge307XG4gICAgcmV0dXJuIGxhbmdEYXRhLm5hdGl2ZU5hbWUgfHwgbGFuZztcbiAgfVxuXG4gIHNhdmVJbkxvY2FsU3RvcmFnZShsYW5nOiBzdHJpbmcpIHtcbiAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oVHJhbnNsYXRlU2VydmljZS5TQVZFX0xBTkdVQUdFX0tFWSwgbGFuZyk7XG4gIH1cblxuICBnZXRTdXBwb3J0ZWQobG9jYWxlQ29kZTogc3RyaW5nKSB7XG4gICAgaWYgKCFsb2NhbGVDb2RlKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBsb2NhbGVDb2RlUGFyc2VkID0gdGhpcy5wYXJzZUxvY2FsZUNvZGUobG9jYWxlQ29kZSk7XG4gICAgY29uc3QgbG9jYWxlQ29kZXNQYXJzZWQgPSB0aGlzLmxhbmdzLm1hcChsYW5nID0+IHRoaXMucGFyc2VMb2NhbGVDb2RlKGxhbmcpKTtcbiAgICBjb25zdCBsYW5nQ291bnRyeUNvZGVNYXRjaCA9IGxvY2FsZUNvZGVzUGFyc2VkLmZpbmQoXG4gICAgICAoeyBsYW5nQ291bnRyeUNvZGUgfSkgPT4gbGFuZ0NvdW50cnlDb2RlID09PSBsb2NhbGVDb2RlUGFyc2VkLmxhbmdDb3VudHJ5Q29kZVxuICAgICk7XG4gICAgaWYgKGxhbmdDb3VudHJ5Q29kZU1hdGNoKSB7XG4gICAgICByZXR1cm4gbGFuZ0NvdW50cnlDb2RlTWF0Y2gubGFuZ0NvdW50cnlDb2RlO1xuICAgIH1cbiAgICBjb25zdCBsYW5nQ29kZU1hdGNoID0gbG9jYWxlQ29kZXNQYXJzZWQuZmluZChcbiAgICAgICh7IGxhbmdDb2RlIH0pID0+IGxhbmdDb2RlID09PSBsb2NhbGVDb2RlUGFyc2VkLmxhbmdDb2RlXG4gICAgKTtcbiAgICBpZiAobGFuZ0NvZGVNYXRjaCkge1xuICAgICAgcmV0dXJuIGxhbmdDb2RlTWF0Y2gubGFuZ0NvdW50cnlDb2RlO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGxhbmd1YWdlIGZyb20gdGhlIHF1ZXJ5IHBhcmFtZXRlci5cbiAgICogQHJldHVybiBUaGUgbGFuZ3VhZ2UgdHdvLWxldHRlciBjb2RlLlxuICAgKi9cbiAgcXVlcnlTdHJpbmdMYW5nKCkge1xuICAgIHJldHVybiB0aGlzLmdldFF1ZXJ5UGFyYW1ldGVyKCdsYW5nJyk7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlTG9jYWxlQ29kZShcbiAgICBsb2NhbGVDb2RlOiBzdHJpbmcsXG4gICAgb3V0cHV0U2VwYXJhdG9yID0gJ18nXG4gICk6IHsgbGFuZ0NvZGU6IHN0cmluZzsgbGFuZ0NvdW50cnlDb2RlOiBzdHJpbmcgfSB7XG4gICAgY29uc3QgbWF0Y2hlcyA9IGxvY2FsZUNvZGUubWF0Y2goL14oW2Etel17Mn0pKFtfLV0oW2Etel17Mn0pKT8kL2kpO1xuICAgIGlmICghbWF0Y2hlcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ291bGQgbm90IHBhcnNlIGxvY2FsZSBjb2RlIFwiJHtsb2NhbGVDb2RlfVwiLCBtYWtlIHN1cmUgaXQncyBhIHR3by0gb3IgZm91ci1sZXR0ZXIgY29kZSAoY2FzZSBpbnNlbnNpdGl2ZSkgc2VwYXJhdGVkIHdpdGggXCJfXCIgb3IgXCItXCIuYFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgbGFuZ0NvZGUgPSBtYXRjaGVzWzFdLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgY291bnRyeUNvZGUgPSBtYXRjaGVzWzNdPy50b1VwcGVyQ2FzZSgpO1xuICAgIGNvbnN0IGxhbmdDb3VudHJ5Q29kZSA9IGAke2xhbmdDb2RlfSR7Y291bnRyeUNvZGUgPyBgJHtvdXRwdXRTZXBhcmF0b3J9JHtjb3VudHJ5Q29kZX1gIDogJyd9YDtcbiAgICByZXR1cm4geyBsYW5nQ29kZSwgbGFuZ0NvdW50cnlDb2RlIH07XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgbGFuZ3VhZ2UgZnJvbSBsb2NhbCBzdG9yYWdlLlxuICAgKiBAcmV0dXJuIFRoZSBsYW5ndWFnZSB0d28tbGV0dGVyIGNvZGUuXG4gICAqL1xuICBwcml2YXRlIGxvY2FsU3RvcmFnZUxhbmcoKSB7XG4gICAgcmV0dXJuIHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShUcmFuc2xhdGVTZXJ2aWNlLlNBVkVfTEFOR1VBR0VfS0VZKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoaWNoIGxhbmd1YWdlIGlzIHNldCBpbiB0aGUgYnJvd3Nlci5cbiAgICogQHJldHVybiBUaGUgbGFuZ3VhZ2VzIHRoZSBicm93c2VyIHN1cHBvcnRzIGFzIHN0cmluZyBhcnJheS5cbiAgICovXG4gIHByaXZhdGUgYnJvd3NlckxhbmdzKCkge1xuICAgIGNvbnN0IHsgbmF2aWdhdG9yIH0gPSB3aW5kb3c7XG4gICAgY29uc3QgYnJvd3Nlckxhbmd1YWdlUHJvcGVydHlLZXlzID0gW1xuICAgICAgJ2xhbmd1YWdlcycsXG4gICAgICAnbGFuZ3VhZ2UnLFxuICAgICAgJ2Jyb3dzZXJMYW5ndWFnZScsXG4gICAgICAnc3lzdGVtTGFuZ3VhZ2UnLFxuICAgICAgJ3VzZXJMYW5ndWFnZSdcbiAgICBdO1xuICAgIHJldHVybiBicm93c2VyTGFuZ3VhZ2VQcm9wZXJ0eUtleXMucmVkdWNlKChsYW5ndWFnZXMsIHByb3BlcnR5KSA9PiB7XG4gICAgICBjb25zdCBwcm9wZXJ0eUxhbmd1YWdlcyA9IG5hdmlnYXRvcltwcm9wZXJ0eV07XG4gICAgICBpZiAodHlwZW9mIHByb3BlcnR5TGFuZ3VhZ2VzID09PSAnc3RyaW5nJykge1xuICAgICAgICBsYW5ndWFnZXMucHVzaChwcm9wZXJ0eUxhbmd1YWdlcyk7XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocHJvcGVydHlMYW5ndWFnZXMpKSB7XG4gICAgICAgIGxhbmd1YWdlcyA9IGxhbmd1YWdlcy5jb25jYXQocHJvcGVydHlMYW5ndWFnZXMpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGxhbmd1YWdlcztcbiAgICB9LCBbXSk7XG4gIH1cblxuICBwcml2YXRlIGdldFF1ZXJ5UGFyYW1ldGVyKHF1ZXJ5S2V5KSB7XG4gICAgLy8gVE9ETzogcmVwbGFjZSB0aGlzIHdpdGggVVJMU2VhcmNoUGFyYW1zLCBpZSAxMSBzdGlsbCBkb2Vzbid0IHN1cHBvcnQgOigpXG4gICAgY29uc3QgcXVlcnkgPSB3aW5kb3cubG9jYXRpb24uc2VhcmNoLnN1YnN0cmluZygxKTtcbiAgICBsZXQgcmVzdWx0O1xuICAgIHF1ZXJ5LnNwbGl0KCcmJykuZmluZChwYWlyID0+IHtcbiAgICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IHBhaXIuc3BsaXQoJz0nKTtcbiAgICAgIGlmIChrZXkgPT09IHF1ZXJ5S2V5KSB7XG4gICAgICAgIHJlc3VsdCA9IHZhbHVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgbG9jYWxlIGZvciBuZ3gtYm9vdHN0cmFwLlxuICAgKiBAcGFyYW0gbGFuZyBBIHR3by1sZXR0ZXIgbGFuZ3VhZ2UgY29kZS5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgc2V0QnNMb2NhbGUobGFuZykge1xuICAgIHN3aXRjaCAobGFuZykge1xuICAgICAgY2FzZSAnZGUnOiB7XG4gICAgICAgIGRlZmluZUxvY2FsZShsYW5nLCBkZUxvY2FsZSk7XG4gICAgICAgIHRoaXMuYnNMb2NhbGVTZXJ2aWNlLnVzZShsYW5nKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdlbic6IHtcbiAgICAgICAgLy8gJ2VuLWdiJyBpcyBjcmVhdGVkIGJlY2F1c2Ugb3ZlcndyaXRpbmcgZGVmYXVsdCAnZW4nIGJyZWFrcyBkYXRlLXBpY2tlciBzb21laG93XG4gICAgICAgIGRlZmluZUxvY2FsZSgnZW4tZ2InLCBlbkdiTG9jYWxlKTtcbiAgICAgICAgdGhpcy5ic0xvY2FsZVNlcnZpY2UudXNlKCdlbi1nYicpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2VzJzoge1xuICAgICAgICBkZWZpbmVMb2NhbGUobGFuZywgZXNMb2NhbGUpO1xuICAgICAgICB0aGlzLmJzTG9jYWxlU2VydmljZS51c2UobGFuZyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnZnInOiB7XG4gICAgICAgIGRlZmluZUxvY2FsZShsYW5nLCBmckxvY2FsZSk7XG4gICAgICAgIHRoaXMuYnNMb2NhbGVTZXJ2aWNlLnVzZShsYW5nKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdqYSc6IHtcbiAgICAgICAgZGVmaW5lTG9jYWxlKGxhbmcsIGphTG9jYWxlKTtcbiAgICAgICAgdGhpcy5ic0xvY2FsZVNlcnZpY2UudXNlKGxhbmcpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2tvJzoge1xuICAgICAgICBkZWZpbmVMb2NhbGUobGFuZywga29Mb2NhbGUpO1xuICAgICAgICB0aGlzLmJzTG9jYWxlU2VydmljZS51c2UobGFuZyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnbmwnOiB7XG4gICAgICAgIGRlZmluZUxvY2FsZShsYW5nLCBubExvY2FsZSk7XG4gICAgICAgIHRoaXMuYnNMb2NhbGVTZXJ2aWNlLnVzZShsYW5nKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdwbCc6IHtcbiAgICAgICAgZGVmaW5lTG9jYWxlKGxhbmcsIHBsTG9jYWxlKTtcbiAgICAgICAgdGhpcy5ic0xvY2FsZVNlcnZpY2UudXNlKGxhbmcpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3B0Jzoge1xuICAgICAgICBkZWZpbmVMb2NhbGUobGFuZywgcHRCckxvY2FsZSk7XG4gICAgICAgIHRoaXMuYnNMb2NhbGVTZXJ2aWNlLnVzZShsYW5nKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICd6aCc6IHtcbiAgICAgICAgZGVmaW5lTG9jYWxlKGxhbmcsIHpoQ25Mb2NhbGUpO1xuICAgICAgICB0aGlzLmJzTG9jYWxlU2VydmljZS51c2UobGFuZyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICBkZWZpbmVMb2NhbGUoJ2VuLWdiJywgZW5HYkxvY2FsZSk7XG4gICAgICAgIHRoaXMuYnNMb2NhbGVTZXJ2aWNlLnVzZSgnZW4tZ2InKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==
264
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL2kxOG4vdHJhbnNsYXRlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQUUsZ0JBQWdCLElBQUksbUJBQW1CLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM5RSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUNMLFlBQVksRUFDWixRQUFRLEVBQ1IsVUFBVSxFQUNWLFFBQVEsRUFDUixRQUFRLEVBQ1IsUUFBUSxFQUNSLFFBQVEsRUFDUixRQUFRLEVBQ1IsUUFBUSxFQUNSLFVBQVUsRUFDVixVQUFVLEVBQ1gsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7Ozs7OztBQUUzRDs7R0FFRztBQUlILE1BQU0sT0FBTyxnQkFBZ0I7YUFDcEIsc0JBQWlCLEdBQUcsY0FBYyxBQUFqQixDQUFrQjtJQUMxQyxNQUFNLENBQUMsV0FBVztRQUNoQixPQUFPLE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDekUsQ0FBQztJQUtELFlBQ1UsWUFBaUMs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QUMsQ0FBQztnQkFDN0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQy9CLE1BQU07WUFDUixDQUFDO1lBQ0QsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUNWLFlBQVksQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7Z0JBQy9CLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUMvQixNQUFNO1lBQ1IsQ0FBQztZQUNELEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDVixZQUFZLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO2dCQUMvQixJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDL0IsTUFBTTtZQUNSLENBQUM7WUFDRCxPQUFPLENBQUMsQ0FBQyxDQUFDO2dCQUNSLFlBQVksQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUM7Z0JBQ2xDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3BDLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQzs4R0FqUVUsZ0JBQWdCLCtHQWFqQixRQUFRO2tIQWJQLGdCQUFnQixjQUZmLE1BQU07OzJGQUVQLGdCQUFnQjtrQkFINUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQWNJLE1BQU07MkJBQUMsUUFBUTs7MEJBQ2YsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERPQ1VNRU5ULCByZWdpc3RlckxvY2FsZURhdGEgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSBhcyBOZ3hUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBrZXlzIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IE9wdGlvbnNTZXJ2aWNlIH0gZnJvbSAnLi4vY29tbW9uL29wdGlvbnMuc2VydmljZSc7XG5pbXBvcnQgeyBBcHBTdGF0ZVNlcnZpY2UgfSBmcm9tICcuLi9jb21tb24vdWktc3RhdGUuc2VydmljZSc7XG5pbXBvcnQgeyBnZXRBbmd1bGFyTG9jYWxlc0xhbmd1YWdlU3RyaW5nIH0gZnJvbSAnLi9pMThuLm1vZHVsZSc7XG5pbXBvcnQgeyBsb2FkTG9jYWxlIH0gZnJvbSAnLi9sb2FkLWxvY2FsZSc7XG5pbXBvcnQge1xuICBkZWZpbmVMb2NhbGUsXG4gIGRlTG9jYWxlLFxuICBlbkdiTG9jYWxlLFxuICBlc0xvY2FsZSxcbiAgZnJMb2NhbGUsXG4gIGphTG9jYWxlLFxuICBrb0xvY2FsZSxcbiAgbmxMb2NhbGUsXG4gIHBsTG9jYWxlLFxuICBwdEJyTG9jYWxlLFxuICB6aENuTG9jYWxlXG59IGZyb20gJ25neC1ib290c3RyYXAvY2hyb25vcyc7XG5pbXBvcnQgeyBCc0xvY2FsZVNlcnZpY2UgfSBmcm9tICduZ3gtYm9vdHN0cmFwL2RhdGVwaWNrZXInO1xuXG4vKipcbiAqIEEgc2VydmljZSB0byBtYW5hZ2UgdGhlIGxhbmd1YWdlIG9mIHRoZSBhcHBsaWNhdGlvbi5cbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgVHJhbnNsYXRlU2VydmljZSB7XG4gIHN0YXRpYyBTQVZFX0xBTkdVQUdFX0tFWSA9ICdjOHlfbGFuZ3VhZ2UnO1xuICBzdGF0aWMgZGVmYXVsdExhbmcoKSB7XG4gICAgcmV0dXJuIHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShUcmFuc2xhdGVTZXJ2aWNlLlNBVkVfTEFOR1VBR0VfS0VZKTtcbiAgfVxuICBsYW5nc0RldGFpbDogYW55ID0gdGhpcy5vcHRpb25zLmdldCgnbGFuZ3VhZ2VzJywge30pO1xuICBsYW5nczogYW55ID0ga2V5cyh0aGlzLmxhbmdzRGV0YWlsKS5maWx0ZXIoayA9PiB0aGlzLmxhbmdzRGV0YWlsW2tdKTtcbiAgcHJpdmF0ZSBERUZBVUxUX1NFUEFSQVRPUiA9ICdfJztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIG5neFRyYW5zbGF0ZTogTmd4VHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIHVpOiBBcHBTdGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBvcHRpb25zOiBPcHRpb25zU2VydmljZSxcbiAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIGRvY3VtZW50OiBEb2N1bWVudCxcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIGJzTG9jYWxlU2VydmljZTogQnNMb2NhbGVTZXJ2aWNlXG4gICkge1xuICAgIGNvbnN0IHF1ZXJ5U3RyaW5nTGFuZyA9IHRoaXMucXVlcnlTdHJpbmdMYW5nKCk7XG4gICAgaWYgKHF1ZXJ5U3RyaW5nTGFuZykge1xuICAgICAgdGhpcy5zYXZlSW5Mb2NhbFN0b3JhZ2UocXVlcnlTdHJpbmdMYW5nKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU3dpdGNoZXMgdGhlIGFwcCB0byBnaXZlbiBsb2NhbGUgKGluY2wuIEFuZ3VsYXIsIEJvb3RzdHJhcCwgdHJhbnNsYXRpb25zKS5cbiAgICogQHBhcmFtIGxvY2FsZUNvZGUgVGhlIGxvY2FsZSBjb2RlLiBTdXBwb3J0ZWQgZm9ybWF0czpcbiAgICogLSB0d28tbGV0dGVyIGNvZGVzIGZvciBsYW5ndWFnZSBvbmx5LCBmb3IgZXhhbXBsZTogYGVuYCwgYGRlYFxuICAgKiAtIGZvdXItbGV0dGVyIGNvZGVzIGZvciBsYW5ndWFnZSBhbmQgY291bnRyeSwgc2VwYXJhdGVkIHdpdGggdW5kZXJzY29yZSBvciBkYXNoLCBmb3IgZXhhbXBsZTogYHpoX0NOYCwgYHpoX2NuYCwgYHpoLUNOYCwgYHpoLWNuYFxuICAgKi9cbiAgYXN5bmMgc3dpdGNoVG9MYW5ndWFnZShsb2NhbGVDb2RlOiBzdHJpbmcpIHtcbiAgICBjb25zdCB7IGxhbmdDb3VudHJ5Q29kZTogbmd4TG9jYWxlQ29kZSwgbGFuZ0NvZGU6IG5neExvY2FsZUNvZGVGYWxsYmFjayB9ID1cbiAgICAgIHRoaXMucGFyc2VMb2NhbGVDb2RlKGxvY2FsZUNvZGUsICctJyk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMubG9hZExvY2FsZXMobmd4TG9jYWxlQ29kZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKG5neExvY2FsZUNvZGVGYWxsYmFjayAhPT0gbmd4TG9jYWxlQ29kZSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRMb2NhbGVzKG5neExvY2FsZUNvZGVGYWxsYmFjayk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHsgbGFuZ0NvZGU6IGJzTG9jYWxlQ29kZSwgbGFuZ0NvdW50cnlDb2RlOiBuZ3hUcmFuc2xhdGVMb2NhbGVDb2RlIH0gPVxuICAgICAgdGhpcy5wYXJzZUxvY2FsZUNvZGUobG9jYWxlQ29kZSk7XG4gICAgdGhpcy5zZXRCc0xvY2FsZShic0xvY2FsZUNvZGUpO1xuICAgIHRoaXMuc2V0TGFuZ3VhZ2Uobmd4VHJhbnNsYXRlTG9jYWxlQ29kZSk7XG4gIH1cblxuICBhc3luYyBsb2FkTG9jYWxlcyhtb2R1bGVMYW5nKSB7XG4gICAgY29uc3QgbW9kdWxlOiBhbnkgPSBhd2FpdCBsb2FkTG9jYWxlKGdldEFuZ3VsYXJMb2NhbGVzTGFuZ3VhZ2VTdHJpbmcobW9kdWxlTGFuZykpO1xuICAgIHJlZ2lzdGVyTG9jYWxlRGF0YShtb2R1bGUuZGVmYXVsdCk7XG4gIH1cblxuICBzZXRMYW5ndWFnZShsYW5nOiBzdHJpbmcpIHtcbiAgICB0aGlzLm5neFRyYW5zbGF0ZS5zZXREZWZhdWx0TGFuZyh0aGlzLm9wdGlvbnMuZ2V0KCdkZWZhdWx0TGFuZ3VhZ2UnLCAnZW4nKSk7XG4gICAgdGhpcy5uZ3hUcmFuc2xhdGUudXNlKGxhbmcpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLnVpLnN0YXRlJC5uZXh0KHsgLi4udGhpcy51aS5zdGF0ZSwgbGFuZyB9KTtcbiAgICB9KTtcblxuICAgIHRoaXMuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmxhbmcgPSBsYW5nO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRzIHRoZSBmaXJzdCBzdXBwb3J0ZWQgbGFuZ3VhZ2VcbiAgICovXG4gIGZpcnN0U3VwcG9ydGVkTGFuZ3VhZ2UoKSB7XG4gICAgY29uc3QgbGFuZ3VhZ2VzID0gW3RoaXMucXVlcnlTdHJpbmdMYW5nKCksIHRoaXMubG9jYWxTdG9yYWdlTGFuZygpXVxuICAgICAgLmNvbmNhdChbdGhpcy5vcHRpb25zLmdldCgnZGVmYXVsdExhbmd1YWdlJyldKVxuICAgICAgLmNvbmNhdCh0aGlzLmJyb3dzZXJMYW5ncygpKVxuICAgICAgLmNvbmNhdChbJ2VuJ10pXG4gICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAubWFwKGxhbmcgPT4gbGFuZy50b0xvd2VyQ2FzZSgpKTtcblxuICAgIGNvbnN0IHByZWZlcnJlZExhbmd1YWdlID0gbGFuZ3VhZ2VzLmZpbmQobGFuZyA9PiB0aGlzLmdldFN1cHBvcnRlZChsYW5nKSk7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3VwcG9ydGVkKHByZWZlcnJlZExhbmd1YWdlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhIGlzbyBsYW5ndWFnZSBjb2RlIHRvIGEgUE8gbGFuZ3VhZ2UgY29kZSAoZS5nLiBkZS1kZSBnZXRzIGRlX2RlKS5cbiAgICogQHBhcmFtIGxhbmcgVGhlIGlzbyBsYW5ndWFnZSBjb2RlLlxuICAgKi9cbiAgY29udmVydFRvTGFuZ3VhZ2VDb2RlUE8obGFuZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBzZXAgPSBsYW5nLmluZGV4T2YoJy0nKSA+IC0xID8gJy0nIDogdGhpcy5ERUZBVUxUX1NFUEFSQVRPUjtcbiAgICBjb25zdCBbbGFuZ01haW4sIGxhbmdTcGVjaWZpY10gPSBsYW5nLnNwbGl0KHNlcCk7XG4gICAgY29uc3QgbGFuZ0xhc3QgPSBsYW5nU3BlY2lmaWMgPyBgJHt0aGlzLkRFRkFVTFRfU0VQQVJBVE9SfSR7bGFuZ1NwZWNpZmljfWAgOiAnJztcbiAgICByZXR1cm4gYCR7bGFuZ01haW59JHtsYW5nTGFzdH1gO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGxhbmd1YWdlIGluIHRoZSBuYXRpdmUgbGFuZ3VhZ2UuXG4gICAqIEBwYXJhbSBsYW5nIFRoZSBsYW5ndWFnZSB0d28tbGV0dGVyIGNvZGUuXG4gICAqIEByZXR1cm4gVGhlIG5hdGl2ZSBuYW1lLlxuICAgKi9cbiAgZ2V0TmF0aXZlTGFuZ3VhZ2UobGFuZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBsYW5nRGF0YSA9ICh0aGlzLmxhbmdzRGV0YWlsIHx8IHt9KVtsYW5nXSB8fCB7fTtcbiAgICByZXR1cm4gbGFuZ0RhdGEubmF0aXZlTmFtZSB8fCBsYW5nO1xuICB9XG5cbiAgc2F2ZUluTG9jYWxTdG9yYWdlKGxhbmc6IHN0cmluZykge1xuICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShUcmFuc2xhdGVTZXJ2aWNlLlNBVkVfTEFOR1VBR0VfS0VZLCBsYW5nKTtcbiAgfVxuXG4gIGdldFN1cHBvcnRlZChsb2NhbGVDb2RlOiBzdHJpbmcpIHtcbiAgICBpZiAoIWxvY2FsZUNvZGUpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IGxvY2FsZUNvZGVQYXJzZWQgPSB0aGlzLnBhcnNlTG9jYWxlQ29kZShsb2NhbGVDb2RlKTtcbiAgICBjb25zdCBsb2NhbGVDb2Rlc1BhcnNlZCA9IHRoaXMubGFuZ3MubWFwKGxhbmcgPT4gdGhpcy5wYXJzZUxvY2FsZUNvZGUobGFuZykpO1xuICAgIGNvbnN0IGxhbmdDb3VudHJ5Q29kZU1hdGNoID0gbG9jYWxlQ29kZXNQYXJzZWQuZmluZChcbiAgICAgICh7IGxhbmdDb3VudHJ5Q29kZSB9KSA9PiBsYW5nQ291bnRyeUNvZGUgPT09IGxvY2FsZUNvZGVQYXJzZWQubGFuZ0NvdW50cnlDb2RlXG4gICAgKTtcbiAgICBpZiAobGFuZ0NvdW50cnlDb2RlTWF0Y2gpIHtcbiAgICAgIHJldHVybiBsYW5nQ291bnRyeUNvZGVNYXRjaC5sYW5nQ291bnRyeUNvZGU7XG4gICAgfVxuICAgIGNvbnN0IGxhbmdDb2RlTWF0Y2ggPSBsb2NhbGVDb2Rlc1BhcnNlZC5maW5kKFxuICAgICAgKHsgbGFuZ0NvZGUgfSkgPT4gbGFuZ0NvZGUgPT09IGxvY2FsZUNvZGVQYXJzZWQubGFuZ0NvZGVcbiAgICApO1xuICAgIGlmIChsYW5nQ29kZU1hdGNoKSB7XG4gICAgICByZXR1cm4gbGFuZ0NvZGVNYXRjaC5sYW5nQ291bnRyeUNvZGU7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgbGFuZ3VhZ2UgZnJvbSB0aGUgcXVlcnkgcGFyYW1ldGVyLlxuICAgKiBAcmV0dXJuIFRoZSBsYW5ndWFnZSB0d28tbGV0dGVyIGNvZGUuXG4gICAqL1xuICBxdWVyeVN0cmluZ0xhbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UXVlcnlQYXJhbWV0ZXIoJ2xhbmcnKTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VMb2NhbGVDb2RlKFxuICAgIGxvY2FsZUNvZGU6IHN0cmluZyxcbiAgICBvdXRwdXRTZXBhcmF0b3IgPSAnXydcbiAgKTogeyBsYW5nQ29kZTogc3RyaW5nOyBsYW5nQ291bnRyeUNvZGU6IHN0cmluZyB9IHtcbiAgICAvLyAtIDIgbGV0dGVyIGxhbmd1YWdlIGNvZGVcbiAgICAvLyAtIG9wdGlvbmFsIHJlZ2lvbiBjb2RlIHRoYXQncyBlaXRoZXIgMiBsZXR0ZXJzIE9SIDMgZGlnaXRzXG4gICAgY29uc3QgbWF0Y2hlcyA9IGxvY2FsZUNvZGUubWF0Y2goL14oW2Etel17Mn0pKFtfLV0oW2Etel17Mn18WzAtOV17M30pKT8kL2kpO1xuICAgIGlmICghbWF0Y2hlcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ291bGQgbm90IHBhcnNlIGxvY2FsZSBjb2RlIFwiJHtsb2NhbGVDb2RlfVwiLiBFeHBlY3RlZCBmb3JtYXQ6IGxhbmd1YWdlIGNvZGUgKDIgbGV0dGVycykgb3B0aW9uYWxseSBmb2xsb3dlZCBieSByZWdpb24gY29kZSAoMiBsZXR0ZXJzIG9yIDMgZGlnaXRzKSBzZXBhcmF0ZWQgd2l0aCBcIl9cIiBvciBcIi1cIiwgZS5nLiBcImVuLVVTXCIgb3IgXCJlcy00MTlcIi5gXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBsYW5nQ29kZSA9IG1hdGNoZXNbMV0udG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCByZWdpb25Db2RlID0gbWF0Y2hlc1szXT8udG9VcHBlckNhc2UoKTtcbiAgICBjb25zdCBsYW5nQ291bnRyeUNvZGUgPSBgJHtsYW5nQ29kZX0ke3JlZ2lvbkNvZGUgPyBgJHtvdXRwdXRTZXBhcmF0b3J9JHtyZWdpb25Db2RlfWAgOiAnJ31gO1xuICAgIHJldHVybiB7IGxhbmdDb2RlLCBsYW5nQ291bnRyeUNvZGUgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBsYW5ndWFnZSBmcm9tIGxvY2FsIHN0b3JhZ2UuXG4gICAqIEByZXR1cm4gVGhlIGxhbmd1YWdlIHR3by1sZXR0ZXIgY29kZS5cbiAgICovXG4gIHByaXZhdGUgbG9jYWxTdG9yYWdlTGFuZygpIHtcbiAgICByZXR1cm4gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKFRyYW5zbGF0ZVNlcnZpY2UuU0FWRV9MQU5HVUFHRV9LRVkpO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hpY2ggbGFuZ3VhZ2UgaXMgc2V0IGluIHRoZSBicm93c2VyLlxuICAgKiBAcmV0dXJuIFRoZSBsYW5ndWFnZXMgdGhlIGJyb3dzZXIgc3VwcG9ydHMgYXMgc3RyaW5nIGFycmF5LlxuICAgKi9cbiAgcHJpdmF0ZSBicm93c2VyTGFuZ3MoKSB7XG4gICAgY29uc3QgeyBuYXZpZ2F0b3IgfSA9IHdpbmRvdztcbiAgICBjb25zdCBicm93c2VyTGFuZ3VhZ2VQcm9wZXJ0eUtleXMgPSBbXG4gICAgICAnbGFuZ3VhZ2VzJyxcbiAgICAgICdsYW5ndWFnZScsXG4gICAgICAnYnJvd3Nlckxhbmd1YWdlJyxcbiAgICAgICdzeXN0ZW1MYW5ndWFnZScsXG4gICAgICAndXNlckxhbmd1YWdlJ1xuICAgIF07XG4gICAgcmV0dXJuIGJyb3dzZXJMYW5ndWFnZVByb3BlcnR5S2V5cy5yZWR1Y2UoKGxhbmd1YWdlcywgcHJvcGVydHkpID0+IHtcbiAgICAgIGNvbnN0IHByb3BlcnR5TGFuZ3VhZ2VzID0gbmF2aWdhdG9yW3Byb3BlcnR5XTtcbiAgICAgIGlmICh0eXBlb2YgcHJvcGVydHlMYW5ndWFnZXMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGxhbmd1YWdlcy5wdXNoKHByb3BlcnR5TGFuZ3VhZ2VzKTtcbiAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShwcm9wZXJ0eUxhbmd1YWdlcykpIHtcbiAgICAgICAgbGFuZ3VhZ2VzID0gbGFuZ3VhZ2VzLmNvbmNhdChwcm9wZXJ0eUxhbmd1YWdlcyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbGFuZ3VhZ2VzO1xuICAgIH0sIFtdKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UXVlcnlQYXJhbWV0ZXIocXVlcnlLZXkpIHtcbiAgICAvLyBUT0RPOiByZXBsYWNlIHRoaXMgd2l0aCBVUkxTZWFyY2hQYXJhbXMsIGllIDExIHN0aWxsIGRvZXNuJ3Qgc3VwcG9ydCA6KClcbiAgICBjb25zdCBxdWVyeSA9IHdpbmRvdy5sb2NhdGlvbi5zZWFyY2guc3Vic3RyaW5nKDEpO1xuICAgIGxldCByZXN1bHQ7XG4gICAgcXVlcnkuc3BsaXQoJyYnKS5maW5kKHBhaXIgPT4ge1xuICAgICAgY29uc3QgW2tleSwgdmFsdWVdID0gcGFpci5zcGxpdCgnPScpO1xuICAgICAgaWYgKGtleSA9PT0gcXVlcnlLZXkpIHtcbiAgICAgICAgcmVzdWx0ID0gdmFsdWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBsb2NhbGUgZm9yIG5neC1ib290c3RyYXAuXG4gICAqIEBwYXJhbSBsYW5nIEEgdHdvLWxldHRlciBsYW5ndWFnZSBjb2RlLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBzZXRCc0xvY2FsZShsYW5nKSB7XG4gICAgc3dpdGNoIChsYW5nKSB7XG4gICAgICBjYXNlICdkZSc6IHtcbiAgICAgICAgZGVmaW5lTG9jYWxlKGxhbmcsIGRlTG9jYWxlKTtcbiAgICAgICAgdGhpcy5ic0xvY2FsZVNlcnZpY2UudXNlKGxhbmcpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2VuJzoge1xuICAgICAgICAvLyAnZW4tZ2InIGlzIGNyZWF0ZWQgYmVjYXVzZSBvdmVyd3JpdGluZyBkZWZhdWx0ICdlbicgYnJlYWtzIGRhdGUtcGlja2VyIHNvbWVob3dcbiAgICAgICAgZGVmaW5lTG9jYWxlKCdlbi1nYicsIGVuR2JMb2NhbGUpO1xuICAgICAgICB0aGlzLmJzTG9jYWxlU2VydmljZS51c2UoJ2VuLWdiJyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnZXMnOiB7XG4gICAgICAgIGRlZmluZUxvY2FsZShsYW5nLCBlc0xvY2FsZSk7XG4gICAgICAgIHRoaXMuYnNMb2NhbGVTZXJ2aWNlLnVzZShsYW5nKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdmcic6IHtcbiAgICAgICAgZGVmaW5lTG9jYWxlKGxhbmcsIGZyTG9jYWxlKTtcbiAgICAgICAgdGhpcy5ic0xvY2FsZVNlcnZpY2UudXNlKGxhbmcpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2phJzoge1xuICAgICAgICBkZWZpbmVMb2NhbGUobGFuZywgamFMb2NhbGUpO1xuICAgICAgICB0aGlzLmJzTG9jYWxlU2VydmljZS51c2UobGFuZyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAna28nOiB7XG4gICAgICAgIGRlZmluZUxvY2FsZShsYW5nLCBrb0xvY2FsZSk7XG4gICAgICAgIHRoaXMuYnNMb2NhbGVTZXJ2aWNlLnVzZShsYW5nKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdubCc6IHtcbiAgICAgICAgZGVmaW5lTG9jYWxlKGxhbmcsIG5sTG9jYWxlKTtcbiAgICAgICAgdGhpcy5ic0xvY2FsZVNlcnZpY2UudXNlKGxhbmcpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3BsJzoge1xuICAgICAgICBkZWZpbmVMb2NhbGUobGFuZywgcGxMb2NhbGUpO1xuICAgICAgICB0aGlzLmJzTG9jYWxlU2VydmljZS51c2UobGFuZyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAncHQnOiB7XG4gICAgICAgIGRlZmluZUxvY2FsZShsYW5nLCBwdEJyTG9jYWxlKTtcbiAgICAgICAgdGhpcy5ic0xvY2FsZVNlcnZpY2UudXNlKGxhbmcpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3poJzoge1xuICAgICAgICBkZWZpbmVMb2NhbGUobGFuZywgemhDbkxvY2FsZSk7XG4gICAgICAgIHRoaXMuYnNMb2NhbGVTZXJ2aWNlLnVzZShsYW5nKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIGRlZmluZUxvY2FsZSgnZW4tZ2InLCBlbkdiTG9jYWxlKTtcbiAgICAgICAgdGhpcy5ic0xvY2FsZVNlcnZpY2UudXNlKCdlbi1nYicpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19