@sumaris-net/ngx-components 2.4.144 → 2.4.145

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.
Files changed (137) hide show
  1. package/esm2020/src/app/core/account/account.page.mjs +1 -1
  2. package/esm2020/src/app/core/form/entity/editor.class.mjs +1 -1
  3. package/esm2020/src/app/core/form/entity/entity-editor-modal.class.mjs +4 -3
  4. package/esm2020/src/app/core/form/entity/entity-editor.class.mjs +2 -2
  5. package/esm2020/src/app/core/form/form.class.mjs +3 -1
  6. package/esm2020/src/app/core/form/form.utils.mjs +4 -1
  7. package/esm2020/src/app/core/form/properties/property.validator.mjs +1 -1
  8. package/esm2020/src/app/core/form/properties/testing/properties-form.test.mjs +1 -1
  9. package/esm2020/src/app/core/form/text-popover/text-popover.component.mjs +1 -1
  10. package/esm2020/src/app/core/graphql/graphql.service.mjs +24 -23
  11. package/esm2020/src/app/core/graphql/graphql.utils.mjs +1 -1
  12. package/esm2020/src/app/core/install/install-upgrade-card.component.mjs +3 -2
  13. package/esm2020/src/app/core/menu/menu.component.mjs +3 -2
  14. package/esm2020/src/app/core/menu/menu.model.mjs +1 -1
  15. package/esm2020/src/app/core/menu/menu.service.mjs +1 -1
  16. package/esm2020/src/app/core/peer/select-peer.modal.mjs +3 -2
  17. package/esm2020/src/app/core/register/register.form.mjs +21 -19
  18. package/esm2020/src/app/core/services/account.service.mjs +3 -2
  19. package/esm2020/src/app/core/services/base-entity-service.class.mjs +1 -1
  20. package/esm2020/src/app/core/services/base-graphql-service.class.mjs +2 -4
  21. package/esm2020/src/app/core/services/config.service.mjs +22 -21
  22. package/esm2020/src/app/core/services/model/entity.decorators.mjs +1 -1
  23. package/esm2020/src/app/core/services/model/filter.model.mjs +3 -1
  24. package/esm2020/src/app/core/services/network.service.mjs +4 -3
  25. package/esm2020/src/app/core/services/network.utils.mjs +1 -1
  26. package/esm2020/src/app/core/services/platform.service.mjs +1 -1
  27. package/esm2020/src/app/core/settings/settings.page.mjs +1 -1
  28. package/esm2020/src/app/core/table/entities-async-table-datasource.class.mjs +1 -1
  29. package/esm2020/src/app/core/table/entities-table-datasource.class.mjs +1 -1
  30. package/esm2020/src/app/core/table/table.class.mjs +9 -5
  31. package/esm2020/src/app/core/table/testing/table.testing.mjs +1 -1
  32. package/esm2020/src/app/shared/audio/audio.mjs +5 -5
  33. package/esm2020/src/app/shared/capacitor/plugins.mjs +1 -1
  34. package/esm2020/src/app/shared/dates.mjs +3 -1
  35. package/esm2020/src/app/shared/debug/debug.component.mjs +1 -1
  36. package/esm2020/src/app/shared/directives/drag-and-drop.directive.mjs +1 -1
  37. package/esm2020/src/app/shared/directives/ng-var.directive.mjs +1 -1
  38. package/esm2020/src/app/shared/directives/resizable/resizable.directive.mjs +1 -1
  39. package/esm2020/src/app/shared/events.mjs +2 -1
  40. package/esm2020/src/app/shared/file/csv.utils.mjs +12 -14
  41. package/esm2020/src/app/shared/file/file.utils.mjs +2 -2
  42. package/esm2020/src/app/shared/file/images.utils.mjs +1 -1
  43. package/esm2020/src/app/shared/file/json.utils.mjs +1 -1
  44. package/esm2020/src/app/shared/file/uri.utils.mjs +2 -1
  45. package/esm2020/src/app/shared/form/field.component.mjs +2 -1
  46. package/esm2020/src/app/shared/forms.mjs +3 -1
  47. package/esm2020/src/app/shared/functions.mjs +7 -2
  48. package/esm2020/src/app/shared/geolocation/geolocation.utils.mjs +1 -1
  49. package/esm2020/src/app/shared/help/help.modal.mjs +1 -1
  50. package/esm2020/src/app/shared/image/gallery/image-gallery.component.mjs +4 -4
  51. package/esm2020/src/app/shared/image/gallery/testing/gallery.testing.mjs +1 -1
  52. package/esm2020/src/app/shared/image/gallery/testing/gallery.testing.module.mjs +1 -1
  53. package/esm2020/src/app/shared/logging/logger.model.mjs +1 -1
  54. package/esm2020/src/app/shared/logging/logging-service.class.mjs +2 -2
  55. package/esm2020/src/app/shared/logging/logging-service.config.mjs +1 -1
  56. package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.mjs +10 -10
  57. package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.utils.mjs +4 -6
  58. package/esm2020/src/app/shared/material/badge/badge.test.mjs +1 -1
  59. package/esm2020/src/app/shared/material/chips/material.chips.mjs +9 -10
  60. package/esm2020/src/app/shared/material/chips/testing/chips.test.mjs +2 -2
  61. package/esm2020/src/app/shared/material/datetime/material.date.mjs +2 -2
  62. package/esm2020/src/app/shared/material/datetime/material.dateshort.mjs +2 -2
  63. package/esm2020/src/app/shared/material/datetime/material.datetime.mjs +3 -3
  64. package/esm2020/src/app/shared/material/duration/material.duration.mjs +3 -3
  65. package/esm2020/src/app/shared/material/latlong/material.latlong.mjs +4 -3
  66. package/esm2020/src/app/shared/material/material.testing.module.mjs +2 -2
  67. package/esm2020/src/app/shared/modules.mjs +2 -1
  68. package/esm2020/src/app/shared/observables.mjs +3 -2
  69. package/esm2020/src/app/shared/pipes/colors.pipe.mjs +1 -1
  70. package/esm2020/src/app/shared/pipes/date-format.pipe.mjs +1 -1
  71. package/esm2020/src/app/shared/pipes/form.pipes.mjs +1 -1
  72. package/esm2020/src/app/shared/pipes/property.pipes.mjs +1 -1
  73. package/esm2020/src/app/shared/platforms.mjs +1 -1
  74. package/esm2020/src/app/shared/services/memory-entity-service.class.mjs +3 -1
  75. package/esm2020/src/app/shared/services/startable-observable-service.class.mjs +4 -4
  76. package/esm2020/src/app/shared/services/translate-context.service.mjs +11 -13
  77. package/esm2020/src/app/shared/services/validator-service.class.mjs +1 -1
  78. package/esm2020/src/app/shared/shared-routing.module.mjs +2 -1
  79. package/esm2020/src/app/shared/storage/storage-explorer.component.mjs +1 -1
  80. package/esm2020/src/app/shared/testing/observable.test.mjs +1 -1
  81. package/esm2020/src/app/shared/toast/toasts.mjs +1 -1
  82. package/esm2020/src/app/shared/toolbar/toolbar.mjs +1 -1
  83. package/esm2020/src/app/shared/upload-file/testing/upload-file.testing.mjs +2 -1
  84. package/esm2020/src/app/shared/upload-file/upload-file.component.mjs +1 -1
  85. package/esm2020/src/app/shared/validator/form-error-adapter.class.mjs +5 -5
  86. package/esm2020/src/app/shared/validator/validators.mjs +6 -2
  87. package/esm2020/src/app/social/job/progression/job-progression.service.mjs +1 -1
  88. package/esm2020/src/app/social/job/testing/job-progression.testing.mjs +1 -1
  89. package/esm2020/src/app/social/job/testing/job-progression.testing.service.mjs +3 -3
  90. package/esm2020/src/app/social/message/message.form.mjs +1 -1
  91. package/esm2020/src/app/social/message/message.modal.mjs +1 -1
  92. package/esm2020/src/app/social/message/message.model.mjs +1 -1
  93. package/esm2020/src/app/social/message/message.service.mjs +2 -2
  94. package/esm2020/src/app/social/social.module.mjs +2 -2
  95. package/esm2020/src/app/social/user-event/notification/user-event-notification.icon.mjs +1 -1
  96. package/esm2020/src/app/social/user-event/testing/user-event.testing.mjs +5 -5
  97. package/esm2020/src/app/social/user-event/testing/user-event.testing.model.mjs +1 -1
  98. package/esm2020/src/app/social/user-event/testing/user-event.testing.service.mjs +1 -1
  99. package/esm2020/src/app/social/user-event/user-event.model.mjs +1 -1
  100. package/esm2020/src/app/social/user-event/user-event.service.mjs +2 -2
  101. package/fesm2015/sumaris-net.ngx-components.mjs +158 -129
  102. package/fesm2015/sumaris-net.ngx-components.mjs.map +1 -1
  103. package/fesm2020/sumaris-net.ngx-components.mjs +172 -145
  104. package/fesm2020/sumaris-net.ngx-components.mjs.map +1 -1
  105. package/package.json +1 -1
  106. package/src/app/core/form/entity/entity-editor-modal.class.d.ts +1 -0
  107. package/src/app/core/form/form.class.d.ts +2 -0
  108. package/src/app/core/form/form.utils.d.ts +3 -0
  109. package/src/app/core/graphql/graphql.service.d.ts +23 -22
  110. package/src/app/core/graphql/graphql.utils.d.ts +2 -2
  111. package/src/app/core/install/install-upgrade-card.component.d.ts +3 -2
  112. package/src/app/core/menu/menu.component.d.ts +3 -2
  113. package/src/app/core/peer/select-peer.modal.d.ts +4 -3
  114. package/src/app/core/register/register.form.d.ts +3 -2
  115. package/src/app/core/services/account.service.d.ts +3 -2
  116. package/src/app/core/services/config.service.d.ts +5 -3
  117. package/src/app/core/services/model/filter.model.d.ts +2 -0
  118. package/src/app/core/services/network.service.d.ts +3 -2
  119. package/src/app/core/table/table.class.d.ts +4 -0
  120. package/src/app/shared/dates.d.ts +2 -0
  121. package/src/app/shared/events.d.ts +1 -0
  122. package/src/app/shared/file/uri.utils.d.ts +1 -0
  123. package/src/app/shared/form/field.component.d.ts +1 -0
  124. package/src/app/shared/forms.d.ts +2 -0
  125. package/src/app/shared/functions.d.ts +1 -0
  126. package/src/app/shared/material/autocomplete/material.autocomplete.d.ts +1 -0
  127. package/src/app/shared/material/latlong/material.latlong.d.ts +1 -0
  128. package/src/app/shared/modules.d.ts +1 -0
  129. package/src/app/shared/observables.d.ts +1 -0
  130. package/src/app/shared/services/memory-entity-service.class.d.ts +2 -0
  131. package/src/app/shared/services/startable-observable-service.class.d.ts +2 -2
  132. package/src/app/shared/services/validator-service.class.d.ts +1 -0
  133. package/src/app/shared/shared-routing.module.d.ts +1 -0
  134. package/src/app/shared/storage/storage-explorer.component.d.ts +2 -2
  135. package/src/app/shared/upload-file/testing/upload-file.testing.d.ts +1 -0
  136. package/src/app/shared/validator/validators.d.ts +4 -0
  137. package/src/app/social/user-event/user-event.model.d.ts +1 -2
@@ -1,5 +1,5 @@
1
1
  import { Component, EventEmitter, Inject, Output, ViewChild } from '@angular/core';
2
- import { UntypedFormControl, Validators } from '@angular/forms';
2
+ import { UntypedFormControl, Validators, } from '@angular/forms';
3
3
  import { Account } from '../services/model/account.model';
4
4
  import { referentialToString } from '../services/model/referential.model';
5
5
  import { timer } from 'rxjs';
@@ -21,6 +21,7 @@ import * as i11 from "@angular/material/button";
21
21
  import * as i12 from "@angular/material/stepper";
22
22
  import * as i13 from "../../shared/directives/autofocus.directive";
23
23
  import * as i14 from "../../shared/form/field.component";
24
+ import * as i15 from "../../../environments/environment.class";
24
25
  export class RegisterForm {
25
26
  constructor(accountService, accountValidatorService, formBuilder, environment, settings) {
26
27
  this.accountService = accountService;
@@ -40,27 +41,27 @@ export class RegisterForm {
40
41
  // Email form
41
42
  this.forms.push(formBuilder.group({
42
43
  email: new UntypedFormControl(null, Validators.compose([Validators.required, Validators.email]), this.emailAvailability(this.accountService)),
43
- confirmEmail: new UntypedFormControl(null, Validators.compose([Validators.required, this.equalsValidator('email')]))
44
+ confirmEmail: new UntypedFormControl(null, Validators.compose([Validators.required, this.equalsValidator('email')])),
44
45
  }));
45
46
  // Password form
46
47
  this.forms.push(formBuilder.group({
47
48
  password: new UntypedFormControl(null, Validators.compose([Validators.required, Validators.minLength(8)])),
48
- confirmPassword: new UntypedFormControl(null, Validators.compose([Validators.required, this.equalsValidator('password')]))
49
+ confirmPassword: new UntypedFormControl(null, Validators.compose([Validators.required, this.equalsValidator('password')])),
49
50
  }));
50
51
  // Detail form
51
52
  const formDetailDef = {
52
53
  lastName: new UntypedFormControl(null, Validators.compose([Validators.required, Validators.minLength(2)])),
53
- firstName: new UntypedFormControl(null, Validators.compose([Validators.required, Validators.minLength(2)]))
54
+ firstName: new UntypedFormControl(null, Validators.compose([Validators.required, Validators.minLength(2)])),
54
55
  };
55
56
  // Prepare autocomplete settings
56
57
  this.autocompleteHelper = new MatAutocompleteConfigHolder(settings && {
57
- getUserAttributes: (a, b) => settings.getFieldDisplayAttributes(a, b)
58
+ getUserAttributes: (a, b) => settings.getFieldDisplayAttributes(a, b),
58
59
  });
59
60
  // Add additional fields to details form
60
61
  this.additionalFields = this.accountService.additionalFields
61
62
  // Keep only required fields
62
- .filter(field => field.extra && field.extra.registration && field.extra.registration.required);
63
- this.additionalFields.forEach(field => {
63
+ .filter((field) => field.extra && field.extra.registration && field.extra.registration.required);
64
+ this.additionalFields.forEach((field) => {
64
65
  //if (this.debug) console.debug("[register-form] Add additional field {" + field.name + "} to form", field);
65
66
  formDetailDef[field.key] = new UntypedFormControl(null, this.accountValidatorService.getValidators(field));
66
67
  if (field.type === 'entity') {
@@ -71,7 +72,7 @@ export class RegisterForm {
71
72
  this.form = formBuilder.group({
72
73
  emailStep: this.forms[0],
73
74
  passwordStep: this.forms[1],
74
- detailsStep: this.forms[2]
75
+ detailsStep: this.forms[2],
75
76
  });
76
77
  }
77
78
  ngOnInit() {
@@ -80,17 +81,17 @@ export class RegisterForm {
80
81
  this.form.setValue({
81
82
  emailStep: {
82
83
  email: 'contact@e-is.pro',
83
- confirmEmail: 'contact@e-is.pro'
84
+ confirmEmail: 'contact@e-is.pro',
84
85
  },
85
86
  passwordStep: {
86
87
  password: 'contactera',
87
- confirmPassword: 'contactera'
88
+ confirmPassword: 'contactera',
88
89
  },
89
90
  detailsStep: {
90
91
  lastName: 'Lavenier 2',
91
92
  firstName: 'Benoit',
92
- department: null
93
- }
93
+ department: null,
94
+ },
94
95
  });
95
96
  }
96
97
  }
@@ -98,7 +99,7 @@ export class RegisterForm {
98
99
  const result = {
99
100
  username: this.form.value.emailStep.email,
100
101
  password: this.form.value.passwordStep.password,
101
- account: new Account()
102
+ account: new Account(),
102
103
  };
103
104
  result.account.fromObject(this.form.value.detailsStep);
104
105
  result.account.email = result.username;
@@ -127,7 +128,7 @@ export class RegisterForm {
127
128
  return function (c) {
128
129
  if (c.parent && c.value !== c.parent.value[otherControlName]) {
129
130
  return {
130
- equals: true
131
+ equals: true,
131
132
  };
132
133
  }
133
134
  return null;
@@ -135,9 +136,10 @@ export class RegisterForm {
135
136
  }
136
137
  emailAvailability(accountService) {
137
138
  return function (control) {
138
- return timer(500).pipe(mergeMap(() => accountService.checkEmailAvailable(control.value)
139
- .then(res => null)
140
- .catch(err => {
139
+ return timer(500).pipe(mergeMap(() => accountService
140
+ .checkEmailAvailable(control.value)
141
+ .then((res) => null)
142
+ .catch((err) => {
141
143
  console.error(err);
142
144
  return { availability: true };
143
145
  })));
@@ -167,7 +169,7 @@ RegisterForm.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version:
167
169
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: RegisterForm, decorators: [{
168
170
  type: Component,
169
171
  args: [{ selector: 'app-register-form', template: "<mat-horizontal-stepper linear #stepper=\"matHorizontalStepper\">\n\n <!-- Step 1: Username -->\n <mat-step [stepControl]=\"forms[0]\" *ngIf=\"forms[0].controls; let controls\">\n\n <form [formGroup]=\"forms[0]\" class=\"form-container ion-padding\" (keyup.enter)=\"slideNext($event)\">\n <ng-template matStepLabel>{{'REGISTER.STEP_EMAIL'|translate}}</ng-template>\n\n <!-- Email -->\n <mat-form-field>\n <input matInput\n [appAutofocus]=\"true\" [autofocusDelay]=\"500\" [placeholder]=\"'USER.EMAIL'|translate\"\n formControlName=\"email\" autocomplete=\"off\" required>\n <mat-error *ngIf=\"controls.email.hasError('required') && controls.email.touched\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngIf=\"controls.email.hasError('email') && !controls.email.hasError('required') && controls.email.touched\">\n <span>{{'ERROR.FIELD_NOT_VALID_EMAIL' | translate }}</span>\n </mat-error>\n <mat-error *ngIf=\"controls.email.hasError('availability') && controls.email.touched\" translate>REGISTER.ERROR.EMAIL_ALREADY_REGISTERED</mat-error>\n\n </mat-form-field>\n\n <!-- Confirm Email -->\n <mat-form-field>\n <input matInput autocomplete=\"off\" matFormFieldControl [placeholder]=\"'REGISTER.CONFIRM_EMAIL'|translate\" formControlName=\"confirmEmail\">\n <mat-error *ngIf=\"controls.confirmEmail.hasError('required') && controls.confirmEmail.touched\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngIf=\"controls.confirmEmail.hasError('equals') && controls.confirmEmail.touched\">\n <span>{{'REGISTER.ERROR.NOT_SAME_EMAIL' | translate }}</span>\n </mat-error>\n </mat-form-field>\n\n </form>\n </mat-step>\n\n\n <!-- Step 2: Password -->\n <mat-step [stepControl]=\"forms[1]\" *ngIf=\"forms[1].controls; let controls\">\n\n <form [formGroup]=\"forms[1]\" class=\"form-container ion-padding\" (keyup.enter)=\"slideNext($event)\">\n\n <ng-template matStepLabel>{{'REGISTER.STEP_PASSWORD'|translate}}</ng-template>\n\n <!-- Password -->\n <mat-form-field>\n <input matInput [placeholder]=\"'USER.PASSWORD'|translate\"\n formControlName=\"password\"\n autocomplete=\"section-red new-password\"\n [type]=\"showPwd ? 'text' : 'password'\"\n required>\n <button matSuffix mat-icon-button\n type=\"button\"\n (click)=\"showPwd = !showPwd\"\n tabindex=\"-1\">\n <mat-icon>{{showPwd ? 'visibility_off' : 'visibility'}}</mat-icon>\n </button>\n <mat-error *ngIf=\"controls.password.hasError('required') && controls.password.touched\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngIf=\"controls.password.hasError('minlength') && controls.password.touched\">\n <span>{{'ERROR.FIELD_MIN_LENGTH' | translate: {minLength: 8} }}</span>\n </mat-error>\n </mat-form-field>\n\n <!-- Confirm password -->\n <mat-form-field>\n <input matInput [placeholder]=\"'REGISTER.CONFIRM_PASSWORD'|translate\"\n formControlName=\"confirmPassword\"\n autocomplete=\"section-red new-password\"\n [type]=\"showConfirmPwd ? 'text' : 'password'\"\n required>\n <button mat-icon-button matSuffix\n (click)=\"showConfirmPwd = !showConfirmPwd\"\n tabindex=\"-1\">\n <mat-icon>{{showConfirmPwd ? 'visibility_off' : 'visibility'}}</mat-icon>\n </button>\n <mat-error *ngIf=\"controls.confirmPassword.hasError('required') && controls.confirmPassword.touched\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngIf=\"controls.confirmPassword.hasError('equals') && controls.confirmPassword.touched\">\n <span>{{'REGISTER.ERROR.NOT_SAME_PASSWORD' | translate }}</span>\n </mat-error>\n </mat-form-field>\n\n </form>\n </mat-step>\n\n\n <!-- Step 3: user details -->\n <mat-step [stepControl]=\"forms[2]\" *ngIf=\"forms[2].controls; let controls\">\n\n <form [formGroup]=\"forms[2]\" (ngSubmit)=\"doSubmit($event)\" class=\"form-container ion-padding\" (keyup.enter)=\"doSubmit()\">\n\n <ng-template matStepLabel>{{'REGISTER.STEP_USER_DETAILS'|translate}}</ng-template>\n\n <!-- error -->\n <ion-item *ngIf=\"error && !sending\" lines=\"none\">\n <ion-icon color=\"danger\" slot=\"start\" name=\"alert-circle\"></ion-icon>\n <ion-label color=\"danger\" class=\"error\" [innerHTML]=\"error|translate\"></ion-label>\n </ion-item>\n\n <!-- Last name -->\n <mat-form-field>\n <input matInput [placeholder]=\"'USER.LAST_NAME'|translate\" formControlName=\"lastName\" autocomplete=\"section-blue family-name\"\n required>\n <mat-error *ngIf=\"controls.lastName.hasError('required') && controls.lastName.dirty\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngIf=\"controls.lastName.hasError('minlength') && controls.lastName.dirty\">\n <span>{{'ERROR.FIELD_MIN_LENGTH' | translate: {minLength: 2} }}</span>\n </mat-error>\n </mat-form-field>\n\n <!-- First name -->\n <mat-form-field>\n <input matInput [placeholder]=\"'USER.FIRST_NAME'|translate\" formControlName=\"firstName\" autocomplete=\"section-blue given-name\"\n required>\n <mat-error *ngIf=\"controls.firstName.hasError('required') && controls.firstName.dirty\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngIf=\"controls.firstName.hasError('minlength') && controls.firstName.dirty\">\n <span>{{'ERROR.FIELD_MIN_LENGTH' | translate: {minLength: 2} }}</span>\n </mat-error>\n </mat-form-field>\n\n <!-- Additional fields -->\n <app-form-field *ngFor=\"let field of additionalFields\"\n [definition]=\"field\"\n [formControlName]=\"field.key\"\n [required]=\"true\">\n </app-form-field>\n\n </form>\n </mat-step>\n</mat-horizontal-stepper>\n", styles: ["form ion-toolbar.toolbar-buttons .toolbar-content{text-align:right}form ion-toolbar.toolbar-buttons .toolbar-background{border:0;background:inherit!important}\n"] }]
170
- }], ctorParameters: function () { return [{ type: i1.AccountService }, { type: i2.AccountValidatorService }, { type: i3.UntypedFormBuilder }, { type: undefined, decorators: [{
172
+ }], ctorParameters: function () { return [{ type: i1.AccountService }, { type: i2.AccountValidatorService }, { type: i3.UntypedFormBuilder }, { type: i15.Environment, decorators: [{
171
173
  type: Inject,
172
174
  args: [ENVIRONMENT]
173
175
  }] }, { type: i4.LocalSettingsService }]; }, propDecorators: { stepper: [{
@@ -178,4 +180,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
178
180
  }], onSubmit: [{
179
181
  type: Output
180
182
  }] } });
181
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0ZXIuZm9ybS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9yZWdpc3Rlci9yZWdpc3Rlci5mb3JtLnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL3JlZ2lzdGVyL3JlZ2lzdGVyLmZvcm0uaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQVUsTUFBTSxFQUFFLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6RixPQUFPLEVBSUwsa0JBQWtCLEVBSWxCLFVBQVUsRUFDWCxNQUFNLGdCQUFnQixDQUFDO0FBRXhCLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUN4RCxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxxQ0FBcUMsQ0FBQztBQUV4RSxPQUFPLEVBQTJCLEtBQUssRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUdyRCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEMsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLHlDQUF5QyxDQUFDO0FBQ3BFLE9BQU8sRUFBQywyQkFBMkIsRUFBQyxNQUFNLGlFQUFpRSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7O0FBUTVHLE1BQU0sT0FBTyxZQUFZO0lBdUJ2QixZQUNVLGNBQThCLEVBQzlCLHVCQUFnRCxFQUNqRCxXQUErQixFQUNQLFdBQVcsRUFDaEMsUUFBK0I7UUFKakMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLDRCQUF1QixHQUF2Qix1QkFBdUIsQ0FBeUI7UUFDakQsZ0JBQVcsR0FBWCxXQUFXLENBQW9CO1FBQ1AsZ0JBQVcsR0FBWCxXQUFXLENBQUE7UUFDaEMsYUFBUSxHQUFSLFFBQVEsQ0FBdUI7UUExQmpDLFVBQUssR0FBRyxLQUFLLENBQUM7UUFNeEIsa0JBQWEsR0FBbUIsRUFBRSxD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QXRMVSxZQUFZLHlIQTJCYixXQUFXOzZGQTNCVixZQUFZLG9PQzdCekIsK2dNQTZIQTsyRkRoR2EsWUFBWTtrQkFMeEIsU0FBUzsrQkFDRSxtQkFBbUI7OzBCQStCMUIsTUFBTTsyQkFBQyxXQUFXOytFQVoyQixPQUFPO3NCQUF0RCxTQUFTO3VCQUFDLFNBQVMsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBR3RDLFFBQVE7c0JBRFAsTUFBTTtnQkFJUCxRQUFRO3NCQURQLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbmplY3QsIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQWJzdHJhY3RDb250cm9sLFxuICBBc3luY1ZhbGlkYXRvckZuLFxuICBVbnR5cGVkRm9ybUJ1aWxkZXIsXG4gIFVudHlwZWRGb3JtQ29udHJvbCxcbiAgVW50eXBlZEZvcm1Hcm91cCxcbiAgVmFsaWRhdGlvbkVycm9ycyxcbiAgVmFsaWRhdG9yRm4sXG4gIFZhbGlkYXRvcnNcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtBY2NvdW50U2VydmljZSwgUmVnaXN0ZXJEYXRhfSBmcm9tICcuLi9zZXJ2aWNlcy9hY2NvdW50LnNlcnZpY2UnO1xuaW1wb3J0IHtBY2NvdW50fSBmcm9tICcuLi9zZXJ2aWNlcy9tb2RlbC9hY2NvdW50Lm1vZGVsJztcbmltcG9ydCB7cmVmZXJlbnRpYWxUb1N0cmluZ30gZnJvbSAnLi4vc2VydmljZXMvbW9kZWwvcmVmZXJlbnRpYWwubW9kZWwnO1xuaW1wb3J0IHtNYXRTdGVwcGVyfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zdGVwcGVyJztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uLCB0aW1lcn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0FjY291bnRWYWxpZGF0b3JTZXJ2aWNlfSBmcm9tICcuLi9zZXJ2aWNlcy92YWxpZGF0b3IvYWNjb3VudC52YWxpZGF0b3InO1xuaW1wb3J0IHtGb3JtRmllbGREZWZpbml0aW9ufSBmcm9tICcuLi8uLi9zaGFyZWQvZm9ybS9maWVsZC5tb2RlbCc7XG5pbXBvcnQge21lcmdlTWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge0xvY2FsU2V0dGluZ3NTZXJ2aWNlfSBmcm9tICcuLi9zZXJ2aWNlcy9sb2NhbC1zZXR0aW5ncy5zZXJ2aWNlJztcbmltcG9ydCB7RU5WSVJPTk1FTlR9IGZyb20gJy4uLy4uLy4uL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudC5jbGFzcyc7XG5pbXBvcnQge01hdEF1dG9jb21wbGV0ZUNvbmZpZ0hvbGRlcn0gZnJvbSAnLi4vLi4vc2hhcmVkL21hdGVyaWFsL2F1dG9jb21wbGV0ZS9tYXRlcmlhbC5hdXRvY29tcGxldGUuY29uZmlnJztcblxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtcmVnaXN0ZXItZm9ybScsXG4gIHRlbXBsYXRlVXJsOiAncmVnaXN0ZXIuZm9ybS5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcmVnaXN0ZXIuZm9ybS5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgUmVnaXN0ZXJGb3JtIGltcGxlbWVudHMgT25Jbml0IHtcblxuICBwcm90ZWN0ZWQgZGVidWcgPSBmYWxzZTtcblxuICBhdXRvY29tcGxldGVIZWxwZXI6IE1hdEF1dG9jb21wbGV0ZUNvbmZpZ0hvbGRlcjtcbiAgYWRkaXRpb25hbEZpZWxkczogRm9ybUZpZWxkRGVmaW5pdGlvbltdO1xuICBmb3JtOiBVbnR5cGVkRm9ybUdyb3VwO1xuICBmb3JtczogVW50eXBlZEZvcm1Hcm91cFtdO1xuICBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuICBlcnJvcjogc3RyaW5nO1xuICBzZW5kaW5nID0gZmFsc2U7XG5cbiAgc2hvd1B3ZCA9IGZhbHNlO1xuICBzaG93Q29uZmlybVB3ZCA9IGZhbHNlO1xuXG4gIEBWaWV3Q2hpbGQoJ3N0ZXBwZXInLCB7IHN0YXRpYzogdHJ1ZSB9KSBwcml2YXRlIHN0ZXBwZXI6IE1hdFN0ZXBwZXI7XG5cbiAgQE91dHB1dCgpXG4gIG9uQ2FuY2VsID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgQE91dHB1dCgpXG4gIG9uU3VibWl0ID0gbmV3IEV2ZW50RW1pdHRlcjxSZWdpc3RlckRhdGE+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhY2NvdW50U2VydmljZTogQWNjb3VudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhY2NvdW50VmFsaWRhdG9yU2VydmljZTogQWNjb3VudFZhbGlkYXRvclNlcnZpY2UsXG4gICAgcHVibGljIGZvcm1CdWlsZGVyOiBVbnR5cGVkRm9ybUJ1aWxkZXIsXG4gICAgQEluamVjdChFTlZJUk9OTUVOVCkgcHJvdGVjdGVkIGVudmlyb25tZW50LFxuICAgIHByb3RlY3RlZCBzZXR0aW5ncz86IExvY2FsU2V0dGluZ3NTZXJ2aWNlXG4gICkge1xuXG5cbiAgICB0aGlzLmZvcm1zID0gW107XG4gICAgLy8gRW1haWwgZm9ybVxuICAgIHRoaXMuZm9ybXMucHVzaChmb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICBlbWFpbDogbmV3IFVudHlwZWRGb3JtQ29udHJvbChudWxsLCBWYWxpZGF0b3JzLmNvbXBvc2UoW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMuZW1haWxdKSwgdGhpcy5lbWFpbEF2YWlsYWJpbGl0eSh0aGlzLmFjY291bnRTZXJ2aWNlKSksXG4gICAgICBjb25maXJtRW1haWw6IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2wobnVsbCwgVmFsaWRhdG9ycy5jb21wb3NlKFtWYWxpZGF0b3JzLnJlcXVpcmVkLCB0aGlzLmVxdWFsc1ZhbGlkYXRvcignZW1haWwnKV0pKVxuICAgIH0pKTtcblxuICAgIC8vIFBhc3N3b3JkIGZvcm1cbiAgICB0aGlzLmZvcm1zLnB1c2goZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgcGFzc3dvcmQ6IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2wobnVsbCwgVmFsaWRhdG9ycy5jb21wb3NlKFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbkxlbmd0aCg4KV0pKSxcbiAgICAgIGNvbmZpcm1QYXNzd29yZDogbmV3IFVudHlwZWRGb3JtQ29udHJvbChudWxsLCBWYWxpZGF0b3JzLmNvbXBvc2UoW1ZhbGlkYXRvcnMucmVxdWlyZWQsIHRoaXMuZXF1YWxzVmFsaWRhdG9yKCdwYXNzd29yZCcpXSkpXG4gICAgfSkpO1xuXG4gICAgLy8gRGV0YWlsIGZvcm1cbiAgICBjb25zdCBmb3JtRGV0YWlsRGVmID0ge1xuICAgICAgbGFzdE5hbWU6IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2wobnVsbCwgVmFsaWRhdG9ycy5jb21wb3NlKFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbkxlbmd0aCgyKV0pKSxcbiAgICAgIGZpcnN0TmFtZTogbmV3IFVudHlwZWRGb3JtQ29udHJvbChudWxsLCBWYWxpZGF0b3JzLmNvbXBvc2UoW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWluTGVuZ3RoKDIpXSkpXG4gICAgfTtcblxuICAgIC8vIFByZXBhcmUgYXV0b2NvbXBsZXRlIHNldHRpbmdzXG4gICAgdGhpcy5hdXRvY29tcGxldGVIZWxwZXIgPSBuZXcgTWF0QXV0b2NvbXBsZXRlQ29uZmlnSG9sZGVyKHNldHRpbmdzICYmIHtcbiAgICAgIGdldFVzZXJBdHRyaWJ1dGVzOiAoYSwgYikgPT4gc2V0dGluZ3MuZ2V0RmllbGREaXNwbGF5QXR0cmlidXRlcyhhLCBiKVxuICAgIH0pO1xuXG5cbiAgICAvLyBBZGQgYWRkaXRpb25hbCBmaWVsZHMgdG8gZGV0YWlscyBmb3JtXG4gICAgdGhpcy5hZGRpdGlvbmFsRmllbGRzID0gdGhpcy5hY2NvdW50U2VydmljZS5hZGRpdGlvbmFsRmllbGRzXG4gICAgICAvLyBLZWVwIG9ubHkgcmVxdWlyZWQgZmllbGRzXG4gICAgICAuZmlsdGVyKGZpZWxkID0+IGZpZWxkLmV4dHJhICYmIGZpZWxkLmV4dHJhLnJlZ2lzdHJhdGlvbiAmJiBmaWVsZC5leHRyYS5yZWdpc3RyYXRpb24ucmVxdWlyZWQpO1xuICAgIHRoaXMuYWRkaXRpb25hbEZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgIC8vaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoXCJbcmVnaXN0ZXItZm9ybV0gQWRkIGFkZGl0aW9uYWwgZmllbGQge1wiICsgZmllbGQubmFtZSArIFwifSB0byBmb3JtXCIsIGZpZWxkKTtcbiAgICAgIGZvcm1EZXRhaWxEZWZbZmllbGQua2V5XSA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2wobnVsbCwgdGhpcy5hY2NvdW50VmFsaWRhdG9yU2VydmljZS5nZXRWYWxpZGF0b3JzKGZpZWxkKSk7XG5cbiAgICAgIGlmIChmaWVsZC50eXBlID09PSAnZW50aXR5Jykge1xuICAgICAgICBmaWVsZC5hdXRvY29tcGxldGUgPSB0aGlzLmF1dG9jb21wbGV0ZUhlbHBlci5hZGQoZmllbGQua2V5LCBmaWVsZC5hdXRvY29tcGxldGUpO1xuICAgICAgfVxuXG4gICAgfSk7XG5cbiAgICB0aGlzLmZvcm1zLnB1c2goZm9ybUJ1aWxkZXIuZ3JvdXAoZm9ybURldGFpbERlZikpO1xuXG4gICAgdGhpcy5mb3JtID0gZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgZW1haWxTdGVwOiB0aGlzLmZvcm1zWzBdLFxuICAgICAgcGFzc3dvcmRTdGVwOiB0aGlzLmZvcm1zWzFdLFxuICAgICAgZGV0YWlsc1N0ZXA6IHRoaXMuZm9ybXNbMl1cbiAgICB9KTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIC8vIEZvciBERVYgb25seSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBpZiAoIXRoaXMuZW52aXJvbm1lbnQucHJvZHVjdGlvbikge1xuICAgICAgdGhpcy5mb3JtLnNldFZhbHVlKHtcbiAgICAgICAgZW1haWxTdGVwOiB7XG4gICAgICAgICAgZW1haWw6ICdjb250YWN0QGUtaXMucHJvJyxcbiAgICAgICAgICBjb25maXJtRW1haWw6ICdjb250YWN0QGUtaXMucHJvJ1xuICAgICAgICB9LFxuICAgICAgICBwYXNzd29yZFN0ZXA6IHtcbiAgICAgICAgICBwYXNzd29yZDogJ2NvbnRhY3RlcmEnLFxuICAgICAgICAgIGNvbmZpcm1QYXNzd29yZDogJ2NvbnRhY3RlcmEnXG4gICAgICAgIH0sXG4gICAgICAgIGRldGFpbHNTdGVwOiB7XG4gICAgICAgICAgbGFzdE5hbWU6ICdMYXZlbmllciAyJyxcbiAgICAgICAgICBmaXJzdE5hbWU6ICdCZW5vaXQnLFxuICAgICAgICAgIGRlcGFydG1lbnQ6IG51bGxcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHZhbHVlKCk6IFJlZ2lzdGVyRGF0YSB7XG4gICAgY29uc3QgcmVzdWx0OiBSZWdpc3RlckRhdGEgPSB7XG4gICAgICB1c2VybmFtZTogdGhpcy5mb3JtLnZhbHVlLmVtYWlsU3RlcC5lbWFpbCxcbiAgICAgIHBhc3N3b3JkOiB0aGlzLmZvcm0udmFsdWUucGFzc3dvcmRTdGVwLnBhc3N3b3JkLFxuICAgICAgYWNjb3VudDogbmV3IEFjY291bnQoKVxuICAgIH07XG4gICAgcmVzdWx0LmFjY291bnQuZnJvbU9iamVjdCh0aGlzLmZvcm0udmFsdWUuZGV0YWlsc1N0ZXApO1xuICAgIHJlc3VsdC5hY2NvdW50LmVtYWlsID0gcmVzdWx0LnVzZXJuYW1lO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGdldCB2YWxpZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtLnZhbGlkO1xuICB9XG5cbiAgaXNFbmQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc3RlcHBlci5zZWxlY3RlZEluZGV4ID09PSAyO1xuICB9XG5cbiAgaXNCZWdpbm5pbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc3RlcHBlci5zZWxlY3RlZEluZGV4ID09PSAwO1xuICB9XG5cbiAgc2xpZGVQcmV2KCkge1xuICAgIHJldHVybiB0aGlzLnN0ZXBwZXIucHJldmlvdXMoKTtcbiAgfVxuXG4gIHNsaWRlTmV4dChldmVudD86IEV2ZW50KSB7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnN0ZXBwZXIubmV4dCgpO1xuICB9XG5cbiAgZXF1YWxzVmFsaWRhdG9yKG90aGVyQ29udHJvbE5hbWU6IHN0cmluZyk6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oYzogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgICAgaWYgKGMucGFyZW50ICYmIGMudmFsdWUgIT09IGMucGFyZW50LnZhbHVlW290aGVyQ29udHJvbE5hbWVdKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZXF1YWxzOiB0cnVlXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9XG5cbiAgZW1haWxBdmFpbGFiaWxpdHkoYWNjb3VudFNlcnZpY2U6IEFjY291bnRTZXJ2aWNlKTogQXN5bmNWYWxpZGF0b3JGbiB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IE9ic2VydmFibGU8VmFsaWRhdGlvbkVycm9ycyB8IG51bGw+IHtcblxuICAgICAgcmV0dXJuIHRpbWVyKDUwMCkucGlwZShtZXJnZU1hcCgoKSA9PiBhY2NvdW50U2VydmljZS5jaGVja0VtYWlsQXZhaWxhYmxlKGNvbnRyb2wudmFsdWUpXG4gICAgICAgICAgLnRoZW4ocmVzID0+IG51bGwpXG4gICAgICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgICAgICByZXR1cm4geyBhdmFpbGFiaWxpdHk6IHRydWUgfTtcbiAgICAgICAgICB9KSkpO1xuICAgIH07XG4gIH1cblxuICBjYW5jZWwoKSB7XG4gICAgdGhpcy5vbkNhbmNlbC5lbWl0KCk7XG4gIH1cblxuICBkb1N1Ym1pdChldmVudD86IGFueSkge1xuICAgIGlmICh0aGlzLmZvcm0uaW52YWxpZCkgcmV0dXJuO1xuICAgIHRoaXMuc2VuZGluZyA9IHRydWU7XG4gICAgdGhpcy5vblN1Ym1pdC5lbWl0KHRoaXMudmFsdWUpO1xuICB9XG5cbiAgcmVmZXJlbnRpYWxUb1N0cmluZyA9IHJlZmVyZW50aWFsVG9TdHJpbmc7XG5cbiAgbWFya0FzVG91Y2hlZCgpIHtcbiAgICB0aGlzLmZvcm0ubWFya0FzVG91Y2hlZCgpO1xuICB9XG5cbiAgZGlzYWJsZSgpIHtcbiAgICB0aGlzLmZvcm0uZGlzYWJsZSgpO1xuICB9XG5cbiAgZW5hYmxlKCkge1xuICAgIHRoaXMuZm9ybS5lbmFibGUoKTtcbiAgfVxufVxuIiwiPG1hdC1ob3Jpem9udGFsLXN0ZXBwZXIgbGluZWFyICNzdGVwcGVyPVwibWF0SG9yaXpvbnRhbFN0ZXBwZXJcIj5cblxuICA8IS0tIFN0ZXAgMTogVXNlcm5hbWUgLS0+XG4gIDxtYXQtc3RlcCBbc3RlcENvbnRyb2xdPVwiZm9ybXNbMF1cIiAqbmdJZj1cImZvcm1zWzBdLmNvbnRyb2xzOyBsZXQgY29udHJvbHNcIj5cblxuICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybXNbMF1cIiBjbGFzcz1cImZvcm0tY29udGFpbmVyIGlvbi1wYWRkaW5nXCIgKGtleXVwLmVudGVyKT1cInNsaWRlTmV4dCgkZXZlbnQpXCI+XG4gICAgICA8bmctdGVtcGxhdGUgbWF0U3RlcExhYmVsPnt7J1JFR0lTVEVSLlNURVBfRU1BSUwnfHRyYW5zbGF0ZX19PC9uZy10ZW1wbGF0ZT5cblxuICAgICAgPCEtLSBFbWFpbCAtLT5cbiAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPGlucHV0IG1hdElucHV0XG4gICAgICAgICAgICAgICBbYXBwQXV0b2ZvY3VzXT1cInRydWVcIiBbYXV0b2ZvY3VzRGVsYXldPVwiNTAwXCIgW3BsYWNlaG9sZGVyXT1cIidVU0VSLkVNQUlMJ3x0cmFuc2xhdGVcIlxuICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImVtYWlsXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgcmVxdWlyZWQ+XG4gICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJjb250cm9scy5lbWFpbC5oYXNFcnJvcigncmVxdWlyZWQnKSAmJiBjb250cm9scy5lbWFpbC50b3VjaGVkXCIgdHJhbnNsYXRlPkVSUk9SLkZJRUxEX1JFUVVJUkVEPC9tYXQtZXJyb3I+XG4gICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJjb250cm9scy5lbWFpbC5oYXNFcnJvcignZW1haWwnKSAmJiAhY29udHJvbHMuZW1haWwuaGFzRXJyb3IoJ3JlcXVpcmVkJykgJiYgY29udHJvbHMuZW1haWwudG91Y2hlZFwiPlxuICAgICAgICAgIDxzcGFuPnt7J0VSUk9SLkZJRUxEX05PVF9WQUxJRF9FTUFJTCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwiY29udHJvbHMuZW1haWwuaGFzRXJyb3IoJ2F2YWlsYWJpbGl0eScpICYmIGNvbnRyb2xzLmVtYWlsLnRvdWNoZWRcIiB0cmFuc2xhdGU+UkVHSVNURVIuRVJST1IuRU1BSUxfQUxSRUFEWV9SRUdJU1RFUkVEPC9tYXQtZXJyb3I+XG5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgIDwhLS0gQ29uZmlybSBFbWFpbCAtLT5cbiAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPGlucHV0IG1hdElucHV0IGF1dG9jb21wbGV0ZT1cIm9mZlwiIG1hdEZvcm1GaWVsZENvbnRyb2wgW3BsYWNlaG9sZGVyXT1cIidSRUdJU1RFUi5DT05GSVJNX0VNQUlMJ3x0cmFuc2xhdGVcIiBmb3JtQ29udHJvbE5hbWU9XCJjb25maXJtRW1haWxcIj5cbiAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cImNvbnRyb2xzLmNvbmZpcm1FbWFpbC5oYXNFcnJvcigncmVxdWlyZWQnKSAmJiBjb250cm9scy5jb25maXJtRW1haWwudG91Y2hlZFwiIHRyYW5zbGF0ZT5FUlJPUi5GSUVMRF9SRVFVSVJFRDwvbWF0LWVycm9yPlxuICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwiY29udHJvbHMuY29uZmlybUVtYWlsLmhhc0Vycm9yKCdlcXVhbHMnKSAmJiBjb250cm9scy5jb25maXJtRW1haWwudG91Y2hlZFwiPlxuICAgICAgICAgIDxzcGFuPnt7J1JFR0lTVEVSLkVSUk9SLk5PVF9TQU1FX0VNQUlMJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgPC9mb3JtPlxuICA8L21hdC1zdGVwPlxuXG5cbiAgPCEtLSBTdGVwIDI6IFBhc3N3b3JkIC0tPlxuICA8bWF0LXN0ZXAgW3N0ZXBDb250cm9sXT1cImZvcm1zWzFdXCIgKm5nSWY9XCJmb3Jtc1sxXS5jb250cm9sczsgbGV0IGNvbnRyb2xzXCI+XG5cbiAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1zWzFdXCIgY2xhc3M9XCJmb3JtLWNvbnRhaW5lciBpb24tcGFkZGluZ1wiIChrZXl1cC5lbnRlcik9XCJzbGlkZU5leHQoJGV2ZW50KVwiPlxuXG4gICAgICA8bmctdGVtcGxhdGUgbWF0U3RlcExhYmVsPnt7J1JFR0lTVEVSLlNURVBfUEFTU1dPUkQnfHRyYW5zbGF0ZX19PC9uZy10ZW1wbGF0ZT5cblxuICAgICAgPCEtLSBQYXNzd29yZCAtLT5cbiAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPGlucHV0IG1hdElucHV0IFtwbGFjZWhvbGRlcl09XCInVVNFUi5QQVNTV09SRCd8dHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInBhc3N3b3JkXCJcbiAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cInNlY3Rpb24tcmVkIG5ldy1wYXNzd29yZFwiXG4gICAgICAgICAgICAgICBbdHlwZV09XCJzaG93UHdkID8gJ3RleHQnIDogJ3Bhc3N3b3JkJ1wiXG4gICAgICAgICAgICAgICByZXF1aXJlZD5cbiAgICAgICAgPGJ1dHRvbiBtYXRTdWZmaXggbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNob3dQd2QgPSAhc2hvd1B3ZFwiXG4gICAgICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiPlxuICAgICAgICAgIDxtYXQtaWNvbj57e3Nob3dQd2QgPyAndmlzaWJpbGl0eV9vZmYnIDogJ3Zpc2liaWxpdHknfX08L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cImNvbnRyb2xzLnBhc3N3b3JkLmhhc0Vycm9yKCdyZXF1aXJlZCcpICYmIGNvbnRyb2xzLnBhc3N3b3JkLnRvdWNoZWRcIiB0cmFuc2xhdGU+RVJST1IuRklFTERfUkVRVUlSRUQ8L21hdC1lcnJvcj5cbiAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cImNvbnRyb2xzLnBhc3N3b3JkLmhhc0Vycm9yKCdtaW5sZW5ndGgnKSAmJiBjb250cm9scy5wYXNzd29yZC50b3VjaGVkXCI+XG4gICAgICAgICAgPHNwYW4+e3snRVJST1IuRklFTERfTUlOX0xFTkdUSCcgfCB0cmFuc2xhdGU6IHttaW5MZW5ndGg6IDh9IH19PC9zcGFuPlxuICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgIDwhLS0gQ29uZmlybSBwYXNzd29yZCAtLT5cbiAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPGlucHV0IG1hdElucHV0IFtwbGFjZWhvbGRlcl09XCInUkVHSVNURVIuQ09ORklSTV9QQVNTV09SRCd8dHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImNvbmZpcm1QYXNzd29yZFwiXG4gICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJzZWN0aW9uLXJlZCBuZXctcGFzc3dvcmRcIlxuICAgICAgICAgICAgICAgW3R5cGVdPVwic2hvd0NvbmZpcm1Qd2QgPyAndGV4dCcgOiAncGFzc3dvcmQnXCJcbiAgICAgICAgICAgICAgIHJlcXVpcmVkPlxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2hvd0NvbmZpcm1Qd2QgPSAhc2hvd0NvbmZpcm1Qd2RcIlxuICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIj5cbiAgICAgICAgICA8bWF0LWljb24+e3tzaG93Q29uZmlybVB3ZCA/ICd2aXNpYmlsaXR5X29mZicgOiAndmlzaWJpbGl0eSd9fTwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwiY29udHJvbHMuY29uZmlybVBhc3N3b3JkLmhhc0Vycm9yKCdyZXF1aXJlZCcpICYmIGNvbnRyb2xzLmNvbmZpcm1QYXNzd29yZC50b3VjaGVkXCIgdHJhbnNsYXRlPkVSUk9SLkZJRUxEX1JFUVVJUkVEPC9tYXQtZXJyb3I+XG4gICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJjb250cm9scy5jb25maXJtUGFzc3dvcmQuaGFzRXJyb3IoJ2VxdWFscycpICYmIGNvbnRyb2xzLmNvbmZpcm1QYXNzd29yZC50b3VjaGVkXCI+XG4gICAgICAgICAgPHNwYW4+e3snUkVHSVNURVIuRVJST1IuTk9UX1NBTUVfUEFTU1dPUkQnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICA8L2Zvcm0+XG4gIDwvbWF0LXN0ZXA+XG5cblxuICA8IS0tIFN0ZXAgMzogdXNlciBkZXRhaWxzIC0tPlxuICA8bWF0LXN0ZXAgW3N0ZXBDb250cm9sXT1cImZvcm1zWzJdXCIgKm5nSWY9XCJmb3Jtc1syXS5jb250cm9sczsgbGV0IGNvbnRyb2xzXCI+XG5cbiAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1zWzJdXCIgKG5nU3VibWl0KT1cImRvU3VibWl0KCRldmVudClcIiBjbGFzcz1cImZvcm0tY29udGFpbmVyIGlvbi1wYWRkaW5nXCIgKGtleXVwLmVudGVyKT1cImRvU3VibWl0KClcIj5cblxuICAgICAgPG5nLXRlbXBsYXRlIG1hdFN0ZXBMYWJlbD57eydSRUdJU1RFUi5TVEVQX1VTRVJfREVUQUlMUyd8dHJhbnNsYXRlfX08L25nLXRlbXBsYXRlPlxuXG4gICAgICA8IS0tIGVycm9yIC0tPlxuICAgICAgPGlvbi1pdGVtICpuZ0lmPVwiZXJyb3IgJiYgIXNlbmRpbmdcIiBsaW5lcz1cIm5vbmVcIj5cbiAgICAgICAgPGlvbi1pY29uIGNvbG9yPVwiZGFuZ2VyXCIgc2xvdD1cInN0YXJ0XCIgbmFtZT1cImFsZXJ0LWNpcmNsZVwiPjwvaW9uLWljb24+XG4gICAgICAgIDxpb24tbGFiZWwgY29sb3I9XCJkYW5nZXJcIiBjbGFzcz1cImVycm9yXCIgW2lubmVySFRNTF09XCJlcnJvcnx0cmFuc2xhdGVcIj48L2lvbi1sYWJlbD5cbiAgICAgIDwvaW9uLWl0ZW0+XG5cbiAgICAgIDwhLS0gTGFzdCBuYW1lIC0tPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgW3BsYWNlaG9sZGVyXT1cIidVU0VSLkxBU1RfTkFNRSd8dHJhbnNsYXRlXCIgZm9ybUNvbnRyb2xOYW1lPVwibGFzdE5hbWVcIiBhdXRvY29tcGxldGU9XCJzZWN0aW9uLWJsdWUgZmFtaWx5LW5hbWVcIlxuICAgICAgICAgIHJlcXVpcmVkPlxuICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwiY29udHJvbHMubGFzdE5hbWUuaGFzRXJyb3IoJ3JlcXVpcmVkJykgJiYgY29udHJvbHMubGFzdE5hbWUuZGlydHlcIiB0cmFuc2xhdGU+RVJST1IuRklFTERfUkVRVUlSRUQ8L21hdC1lcnJvcj5cbiAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cImNvbnRyb2xzLmxhc3ROYW1lLmhhc0Vycm9yKCdtaW5sZW5ndGgnKSAmJiBjb250cm9scy5sYXN0TmFtZS5kaXJ0eVwiPlxuICAgICAgICAgIDxzcGFuPnt7J0VSUk9SLkZJRUxEX01JTl9MRU5HVEgnIHwgdHJhbnNsYXRlOiB7bWluTGVuZ3RoOiAyfSB9fTwvc3Bhbj5cbiAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICA8IS0tIEZpcnN0IG5hbWUgLS0+XG4gICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbcGxhY2Vob2xkZXJdPVwiJ1VTRVIuRklSU1RfTkFNRSd8dHJhbnNsYXRlXCIgZm9ybUNvbnRyb2xOYW1lPVwiZmlyc3ROYW1lXCIgYXV0b2NvbXBsZXRlPVwic2VjdGlvbi1ibHVlIGdpdmVuLW5hbWVcIlxuICAgICAgICAgIHJlcXVpcmVkPlxuICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwiY29udHJvbHMuZmlyc3ROYW1lLmhhc0Vycm9yKCdyZXF1aXJlZCcpICYmIGNvbnRyb2xzLmZpcnN0TmFtZS5kaXJ0eVwiIHRyYW5zbGF0ZT5FUlJPUi5GSUVMRF9SRVFVSVJFRDwvbWF0LWVycm9yPlxuICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwiY29udHJvbHMuZmlyc3ROYW1lLmhhc0Vycm9yKCdtaW5sZW5ndGgnKSAmJiBjb250cm9scy5maXJzdE5hbWUuZGlydHlcIj5cbiAgICAgICAgICA8c3Bhbj57eydFUlJPUi5GSUVMRF9NSU5fTEVOR1RIJyB8IHRyYW5zbGF0ZToge21pbkxlbmd0aDogMn0gfX08L3NwYW4+XG4gICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgPCEtLSBBZGRpdGlvbmFsIGZpZWxkcyAtLT5cbiAgICAgIDxhcHAtZm9ybS1maWVsZCAqbmdGb3I9XCJsZXQgZmllbGQgb2YgYWRkaXRpb25hbEZpZWxkc1wiXG4gICAgICAgICAgICAgICAgICAgICAgW2RlZmluaXRpb25dPVwiZmllbGRcIlxuICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwidHJ1ZVwiPlxuICAgICAgPC9hcHAtZm9ybS1maWVsZD5cblxuICAgIDwvZm9ybT5cbiAgPC9tYXQtc3RlcD5cbjwvbWF0LWhvcml6b250YWwtc3RlcHBlcj5cbiJdfQ==
183
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0ZXIuZm9ybS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9yZWdpc3Rlci9yZWdpc3Rlci5mb3JtLnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL3JlZ2lzdGVyL3JlZ2lzdGVyLmZvcm0uaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQVUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRixPQUFPLEVBSUwsa0JBQWtCLEVBSWxCLFVBQVUsR0FDWCxNQUFNLGdCQUFnQixDQUFDO0FBRXhCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMxRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUUxRSxPQUFPLEVBQTRCLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUd2RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFMUMsT0FBTyxFQUFlLFdBQVcsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ25GLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGlFQUFpRSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQU85RyxNQUFNLE9BQU8sWUFBWTtJQXNCdkIsWUFDVSxjQUE4QixFQUM5Qix1QkFBZ0QsRUFDakQsV0FBK0IsRUFDUCxXQUF3QixFQUM3QyxRQUErQjtRQUpqQyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsNEJBQXVCLEdBQXZCLHVCQUF1QixDQUF5QjtRQUNqRCxnQkFBVyxHQUFYLFdBQVcsQ0FBb0I7UUFDUCxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUM3QyxhQUFRLEdBQVIsUUFBUSxDQUF1QjtRQTFCakMsVUFBSyxHQUFHLEtBQUssQ0FBQztRQU14QixrQkFBYSxHQUFtQixFQUFF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RUFBRSxDQUFDO0lBQ3JCLENBQUM7O3lHQTNMVSxZQUFZLHlIQTBCYixXQUFXOzZGQTFCVixZQUFZLG9PQzVCekIsK2dNQTZIQTsyRkRqR2EsWUFBWTtrQkFMeEIsU0FBUzsrQkFDRSxtQkFBbUI7OzBCQThCMUIsTUFBTTsyQkFBQyxXQUFXOytFQVoyQixPQUFPO3NCQUF0RCxTQUFTO3VCQUFDLFNBQVMsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBR3RDLFFBQVE7c0JBRFAsTUFBTTtnQkFJUCxRQUFRO3NCQURQLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5qZWN0LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBYnN0cmFjdENvbnRyb2wsXG4gIEFzeW5jVmFsaWRhdG9yRm4sXG4gIFVudHlwZWRGb3JtQnVpbGRlcixcbiAgVW50eXBlZEZvcm1Db250cm9sLFxuICBVbnR5cGVkRm9ybUdyb3VwLFxuICBWYWxpZGF0aW9uRXJyb3JzLFxuICBWYWxpZGF0b3JGbixcbiAgVmFsaWRhdG9ycyxcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQWNjb3VudFNlcnZpY2UsIFJlZ2lzdGVyRGF0YSB9IGZyb20gJy4uL3NlcnZpY2VzL2FjY291bnQuc2VydmljZSc7XG5pbXBvcnQgeyBBY2NvdW50IH0gZnJvbSAnLi4vc2VydmljZXMvbW9kZWwvYWNjb3VudC5tb2RlbCc7XG5pbXBvcnQgeyByZWZlcmVudGlhbFRvU3RyaW5nIH0gZnJvbSAnLi4vc2VydmljZXMvbW9kZWwvcmVmZXJlbnRpYWwubW9kZWwnO1xuaW1wb3J0IHsgTWF0U3RlcHBlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3N0ZXBwZXInO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uLCB0aW1lciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQWNjb3VudFZhbGlkYXRvclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy92YWxpZGF0b3IvYWNjb3VudC52YWxpZGF0b3InO1xuaW1wb3J0IHsgRm9ybUZpZWxkRGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uL3NoYXJlZC9mb3JtL2ZpZWxkLm1vZGVsJztcbmltcG9ydCB7IG1lcmdlTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgTG9jYWxTZXR0aW5nc1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9sb2NhbC1zZXR0aW5ncy5zZXJ2aWNlJztcbmltcG9ydCB7IEVudmlyb25tZW50LCBFTlZJUk9OTUVOVCB9IGZyb20gJy4uLy4uLy4uL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudC5jbGFzcyc7XG5pbXBvcnQgeyBNYXRBdXRvY29tcGxldGVDb25maWdIb2xkZXIgfSBmcm9tICcuLi8uLi9zaGFyZWQvbWF0ZXJpYWwvYXV0b2NvbXBsZXRlL21hdGVyaWFsLmF1dG9jb21wbGV0ZS5jb25maWcnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtcmVnaXN0ZXItZm9ybScsXG4gIHRlbXBsYXRlVXJsOiAncmVnaXN0ZXIuZm9ybS5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcmVnaXN0ZXIuZm9ybS5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIFJlZ2lzdGVyRm9ybSBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHByb3RlY3RlZCBkZWJ1ZyA9IGZhbHNlO1xuXG4gIGF1dG9jb21wbGV0ZUhlbHBlcjogTWF0QXV0b2NvbXBsZXRlQ29uZmlnSG9sZGVyO1xuICBhZGRpdGlvbmFsRmllbGRzOiBGb3JtRmllbGREZWZpbml0aW9uW107XG4gIGZvcm06IFVudHlwZWRGb3JtR3JvdXA7XG4gIGZvcm1zOiBVbnR5cGVkRm9ybUdyb3VwW107XG4gIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XG4gIGVycm9yOiBzdHJpbmc7XG4gIHNlbmRpbmcgPSBmYWxzZTtcblxuICBzaG93UHdkID0gZmFsc2U7XG4gIHNob3dDb25maXJtUHdkID0gZmFsc2U7XG5cbiAgQFZpZXdDaGlsZCgnc3RlcHBlcicsIHsgc3RhdGljOiB0cnVlIH0pIHByaXZhdGUgc3RlcHBlcjogTWF0U3RlcHBlcjtcblxuICBAT3V0cHV0KClcbiAgb25DYW5jZWwgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBAT3V0cHV0KClcbiAgb25TdWJtaXQgPSBuZXcgRXZlbnRFbWl0dGVyPFJlZ2lzdGVyRGF0YT4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGFjY291bnRTZXJ2aWNlOiBBY2NvdW50U2VydmljZSxcbiAgICBwcml2YXRlIGFjY291bnRWYWxpZGF0b3JTZXJ2aWNlOiBBY2NvdW50VmFsaWRhdG9yU2VydmljZSxcbiAgICBwdWJsaWMgZm9ybUJ1aWxkZXI6IFVudHlwZWRGb3JtQnVpbGRlcixcbiAgICBASW5qZWN0KEVOVklST05NRU5UKSBwcm90ZWN0ZWQgZW52aXJvbm1lbnQ6IEVudmlyb25tZW50LFxuICAgIHByb3RlY3RlZCBzZXR0aW5ncz86IExvY2FsU2V0dGluZ3NTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuZm9ybXMgPSBbXTtcbiAgICAvLyBFbWFpbCBmb3JtXG4gICAgdGhpcy5mb3Jtcy5wdXNoKFxuICAgICAgZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgICBlbWFpbDogbmV3IFVudHlwZWRGb3JtQ29udHJvbChudWxsLCBWYWxpZGF0b3JzLmNvbXBvc2UoW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMuZW1haWxdKSwgdGhpcy5lbWFpbEF2YWlsYWJpbGl0eSh0aGlzLmFjY291bnRTZXJ2aWNlKSksXG4gICAgICAgIGNvbmZpcm1FbWFpbDogbmV3IFVudHlwZWRGb3JtQ29udHJvbChudWxsLCBWYWxpZGF0b3JzLmNvbXBvc2UoW1ZhbGlkYXRvcnMucmVxdWlyZWQsIHRoaXMuZXF1YWxzVmFsaWRhdG9yKCdlbWFpbCcpXSkpLFxuICAgICAgfSlcbiAgICApO1xuXG4gICAgLy8gUGFzc3dvcmQgZm9ybVxuICAgIHRoaXMuZm9ybXMucHVzaChcbiAgICAgIGZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgICAgcGFzc3dvcmQ6IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2wobnVsbCwgVmFsaWRhdG9ycy5jb21wb3NlKFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbkxlbmd0aCg4KV0pKSxcbiAgICAgICAgY29uZmlybVBhc3N3b3JkOiBuZXcgVW50eXBlZEZvcm1Db250cm9sKG51bGwsIFZhbGlkYXRvcnMuY29tcG9zZShbVmFsaWRhdG9ycy5yZXF1aXJlZCwgdGhpcy5lcXVhbHNWYWxpZGF0b3IoJ3Bhc3N3b3JkJyldKSksXG4gICAgICB9KVxuICAgICk7XG5cbiAgICAvLyBEZXRhaWwgZm9ybVxuICAgIGNvbnN0IGZvcm1EZXRhaWxEZWYgPSB7XG4gICAgICBsYXN0TmFtZTogbmV3IFVudHlwZWRGb3JtQ29udHJvbChudWxsLCBWYWxpZGF0b3JzLmNvbXBvc2UoW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWluTGVuZ3RoKDIpXSkpLFxuICAgICAgZmlyc3ROYW1lOiBuZXcgVW50eXBlZEZvcm1Db250cm9sKG51bGwsIFZhbGlkYXRvcnMuY29tcG9zZShbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW5MZW5ndGgoMildKSksXG4gICAgfTtcblxuICAgIC8vIFByZXBhcmUgYXV0b2NvbXBsZXRlIHNldHRpbmdzXG4gICAgdGhpcy5hdXRvY29tcGxldGVIZWxwZXIgPSBuZXcgTWF0QXV0b2NvbXBsZXRlQ29uZmlnSG9sZGVyKFxuICAgICAgc2V0dGluZ3MgJiYge1xuICAgICAgICBnZXRVc2VyQXR0cmlidXRlczogKGEsIGIpID0+IHNldHRpbmdzLmdldEZpZWxkRGlzcGxheUF0dHJpYnV0ZXMoYSwgYiksXG4gICAgICB9XG4gICAgKTtcblxuICAgIC8vIEFkZCBhZGRpdGlvbmFsIGZpZWxkcyB0byBkZXRhaWxzIGZvcm1cbiAgICB0aGlzLmFkZGl0aW9uYWxGaWVsZHMgPSB0aGlzLmFjY291bnRTZXJ2aWNlLmFkZGl0aW9uYWxGaWVsZHNcbiAgICAgIC8vIEtlZXAgb25seSByZXF1aXJlZCBmaWVsZHNcbiAgICAgIC5maWx0ZXIoKGZpZWxkKSA9PiBmaWVsZC5leHRyYSAmJiBmaWVsZC5leHRyYS5yZWdpc3RyYXRpb24gJiYgZmllbGQuZXh0cmEucmVnaXN0cmF0aW9uLnJlcXVpcmVkKTtcbiAgICB0aGlzLmFkZGl0aW9uYWxGaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgIC8vaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoXCJbcmVnaXN0ZXItZm9ybV0gQWRkIGFkZGl0aW9uYWwgZmllbGQge1wiICsgZmllbGQubmFtZSArIFwifSB0byBmb3JtXCIsIGZpZWxkKTtcbiAgICAgIGZvcm1EZXRhaWxEZWZbZmllbGQua2V5XSA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2wobnVsbCwgdGhpcy5hY2NvdW50VmFsaWRhdG9yU2VydmljZS5nZXRWYWxpZGF0b3JzKGZpZWxkKSk7XG5cbiAgICAgIGlmIChmaWVsZC50eXBlID09PSAnZW50aXR5Jykge1xuICAgICAgICBmaWVsZC5hdXRvY29tcGxldGUgPSB0aGlzLmF1dG9jb21wbGV0ZUhlbHBlci5hZGQoZmllbGQua2V5LCBmaWVsZC5hdXRvY29tcGxldGUpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5mb3Jtcy5wdXNoKGZvcm1CdWlsZGVyLmdyb3VwKGZvcm1EZXRhaWxEZWYpKTtcblxuICAgIHRoaXMuZm9ybSA9IGZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgIGVtYWlsU3RlcDogdGhpcy5mb3Jtc1swXSxcbiAgICAgIHBhc3N3b3JkU3RlcDogdGhpcy5mb3Jtc1sxXSxcbiAgICAgIGRldGFpbHNTdGVwOiB0aGlzLmZvcm1zWzJdLFxuICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgLy8gRm9yIERFViBvbmx5IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGlmICghdGhpcy5lbnZpcm9ubWVudC5wcm9kdWN0aW9uKSB7XG4gICAgICB0aGlzLmZvcm0uc2V0VmFsdWUoe1xuICAgICAgICBlbWFpbFN0ZXA6IHtcbiAgICAgICAgICBlbWFpbDogJ2NvbnRhY3RAZS1pcy5wcm8nLFxuICAgICAgICAgIGNvbmZpcm1FbWFpbDogJ2NvbnRhY3RAZS1pcy5wcm8nLFxuICAgICAgICB9LFxuICAgICAgICBwYXNzd29yZFN0ZXA6IHtcbiAgICAgICAgICBwYXNzd29yZDogJ2NvbnRhY3RlcmEnLFxuICAgICAgICAgIGNvbmZpcm1QYXNzd29yZDogJ2NvbnRhY3RlcmEnLFxuICAgICAgICB9LFxuICAgICAgICBkZXRhaWxzU3RlcDoge1xuICAgICAgICAgIGxhc3ROYW1lOiAnTGF2ZW5pZXIgMicsXG4gICAgICAgICAgZmlyc3ROYW1lOiAnQmVub2l0JyxcbiAgICAgICAgICBkZXBhcnRtZW50OiBudWxsLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHZhbHVlKCk6IFJlZ2lzdGVyRGF0YSB7XG4gICAgY29uc3QgcmVzdWx0OiBSZWdpc3RlckRhdGEgPSB7XG4gICAgICB1c2VybmFtZTogdGhpcy5mb3JtLnZhbHVlLmVtYWlsU3RlcC5lbWFpbCxcbiAgICAgIHBhc3N3b3JkOiB0aGlzLmZvcm0udmFsdWUucGFzc3dvcmRTdGVwLnBhc3N3b3JkLFxuICAgICAgYWNjb3VudDogbmV3IEFjY291bnQoKSxcbiAgICB9O1xuICAgIHJlc3VsdC5hY2NvdW50LmZyb21PYmplY3QodGhpcy5mb3JtLnZhbHVlLmRldGFpbHNTdGVwKTtcbiAgICByZXN1bHQuYWNjb3VudC5lbWFpbCA9IHJlc3VsdC51c2VybmFtZTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBnZXQgdmFsaWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybS52YWxpZDtcbiAgfVxuXG4gIGlzRW5kKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnN0ZXBwZXIuc2VsZWN0ZWRJbmRleCA9PT0gMjtcbiAgfVxuXG4gIGlzQmVnaW5uaW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnN0ZXBwZXIuc2VsZWN0ZWRJbmRleCA9PT0gMDtcbiAgfVxuXG4gIHNsaWRlUHJldigpIHtcbiAgICByZXR1cm4gdGhpcy5zdGVwcGVyLnByZXZpb3VzKCk7XG4gIH1cblxuICBzbGlkZU5leHQoZXZlbnQ/OiBFdmVudCkge1xuICAgIGlmIChldmVudCkge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zdGVwcGVyLm5leHQoKTtcbiAgfVxuXG4gIGVxdWFsc1ZhbGlkYXRvcihvdGhlckNvbnRyb2xOYW1lOiBzdHJpbmcpOiBWYWxpZGF0b3JGbiB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGM6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICAgIGlmIChjLnBhcmVudCAmJiBjLnZhbHVlICE9PSBjLnBhcmVudC52YWx1ZVtvdGhlckNvbnRyb2xOYW1lXSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGVxdWFsczogdHJ1ZSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cblxuICBlbWFpbEF2YWlsYWJpbGl0eShhY2NvdW50U2VydmljZTogQWNjb3VudFNlcnZpY2UpOiBBc3luY1ZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogT2JzZXJ2YWJsZTxWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbD4ge1xuICAgICAgcmV0dXJuIHRpbWVyKDUwMCkucGlwZShcbiAgICAgICAgbWVyZ2VNYXAoKCkgPT5cbiAgICAgICAgICBhY2NvdW50U2VydmljZVxuICAgICAgICAgICAgLmNoZWNrRW1haWxBdmFpbGFibGUoY29udHJvbC52YWx1ZSlcbiAgICAgICAgICAgIC50aGVuKChyZXMpID0+IG51bGwpXG4gICAgICAgICAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgICAgICAgIHJldHVybiB7IGF2YWlsYWJpbGl0eTogdHJ1ZSB9O1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9O1xuICB9XG5cbiAgY2FuY2VsKCkge1xuICAgIHRoaXMub25DYW5jZWwuZW1pdCgpO1xuICB9XG5cbiAgZG9TdWJtaXQoZXZlbnQ/OiBhbnkpIHtcbiAgICBpZiAodGhpcy5mb3JtLmludmFsaWQpIHJldHVybjtcbiAgICB0aGlzLnNlbmRpbmcgPSB0cnVlO1xuICAgIHRoaXMub25TdWJtaXQuZW1pdCh0aGlzLnZhbHVlKTtcbiAgfVxuXG4gIHJlZmVyZW50aWFsVG9TdHJpbmcgPSByZWZlcmVudGlhbFRvU3RyaW5nO1xuXG4gIG1hcmtBc1RvdWNoZWQoKSB7XG4gICAgdGhpcy5mb3JtLm1hcmtBc1RvdWNoZWQoKTtcbiAgfVxuXG4gIGRpc2FibGUoKSB7XG4gICAgdGhpcy5mb3JtLmRpc2FibGUoKTtcbiAgfVxuXG4gIGVuYWJsZSgpIHtcbiAgICB0aGlzLmZvcm0uZW5hYmxlKCk7XG4gIH1cbn1cbiIsIjxtYXQtaG9yaXpvbnRhbC1zdGVwcGVyIGxpbmVhciAjc3RlcHBlcj1cIm1hdEhvcml6b250YWxTdGVwcGVyXCI+XG5cbiAgPCEtLSBTdGVwIDE6IFVzZXJuYW1lIC0tPlxuICA8bWF0LXN0ZXAgW3N0ZXBDb250cm9sXT1cImZvcm1zWzBdXCIgKm5nSWY9XCJmb3Jtc1swXS5jb250cm9sczsgbGV0IGNvbnRyb2xzXCI+XG5cbiAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1zWzBdXCIgY2xhc3M9XCJmb3JtLWNvbnRhaW5lciBpb24tcGFkZGluZ1wiIChrZXl1cC5lbnRlcik9XCJzbGlkZU5leHQoJGV2ZW50KVwiPlxuICAgICAgPG5nLXRlbXBsYXRlIG1hdFN0ZXBMYWJlbD57eydSRUdJU1RFUi5TVEVQX0VNQUlMJ3x0cmFuc2xhdGV9fTwvbmctdGVtcGxhdGU+XG5cbiAgICAgIDwhLS0gRW1haWwgLS0+XG4gICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dFxuICAgICAgICAgICAgICAgW2FwcEF1dG9mb2N1c109XCJ0cnVlXCIgW2F1dG9mb2N1c0RlbGF5XT1cIjUwMFwiIFtwbGFjZWhvbGRlcl09XCInVVNFUi5FTUFJTCd8dHJhbnNsYXRlXCJcbiAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJlbWFpbFwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIHJlcXVpcmVkPlxuICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwiY29udHJvbHMuZW1haWwuaGFzRXJyb3IoJ3JlcXVpcmVkJykgJiYgY29udHJvbHMuZW1haWwudG91Y2hlZFwiIHRyYW5zbGF0ZT5FUlJPUi5GSUVMRF9SRVFVSVJFRDwvbWF0LWVycm9yPlxuICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwiY29udHJvbHMuZW1haWwuaGFzRXJyb3IoJ2VtYWlsJykgJiYgIWNvbnRyb2xzLmVtYWlsLmhhc0Vycm9yKCdyZXF1aXJlZCcpICYmIGNvbnRyb2xzLmVtYWlsLnRvdWNoZWRcIj5cbiAgICAgICAgICA8c3Bhbj57eydFUlJPUi5GSUVMRF9OT1RfVkFMSURfRU1BSUwnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cImNvbnRyb2xzLmVtYWlsLmhhc0Vycm9yKCdhdmFpbGFiaWxpdHknKSAmJiBjb250cm9scy5lbWFpbC50b3VjaGVkXCIgdHJhbnNsYXRlPlJFR0lTVEVSLkVSUk9SLkVNQUlMX0FMUkVBRFlfUkVHSVNURVJFRDwvbWF0LWVycm9yPlxuXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICA8IS0tIENvbmZpcm0gRW1haWwgLS0+XG4gICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBhdXRvY29tcGxldGU9XCJvZmZcIiBtYXRGb3JtRmllbGRDb250cm9sIFtwbGFjZWhvbGRlcl09XCInUkVHSVNURVIuQ09ORklSTV9FTUFJTCd8dHJhbnNsYXRlXCIgZm9ybUNvbnRyb2xOYW1lPVwiY29uZmlybUVtYWlsXCI+XG4gICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJjb250cm9scy5jb25maXJtRW1haWwuaGFzRXJyb3IoJ3JlcXVpcmVkJykgJiYgY29udHJvbHMuY29uZmlybUVtYWlsLnRvdWNoZWRcIiB0cmFuc2xhdGU+RVJST1IuRklFTERfUkVRVUlSRUQ8L21hdC1lcnJvcj5cbiAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cImNvbnRyb2xzLmNvbmZpcm1FbWFpbC5oYXNFcnJvcignZXF1YWxzJykgJiYgY29udHJvbHMuY29uZmlybUVtYWlsLnRvdWNoZWRcIj5cbiAgICAgICAgICA8c3Bhbj57eydSRUdJU1RFUi5FUlJPUi5OT1RfU0FNRV9FTUFJTCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgIDwvZm9ybT5cbiAgPC9tYXQtc3RlcD5cblxuXG4gIDwhLS0gU3RlcCAyOiBQYXNzd29yZCAtLT5cbiAgPG1hdC1zdGVwIFtzdGVwQ29udHJvbF09XCJmb3Jtc1sxXVwiICpuZ0lmPVwiZm9ybXNbMV0uY29udHJvbHM7IGxldCBjb250cm9sc1wiPlxuXG4gICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3Jtc1sxXVwiIGNsYXNzPVwiZm9ybS1jb250YWluZXIgaW9uLXBhZGRpbmdcIiAoa2V5dXAuZW50ZXIpPVwic2xpZGVOZXh0KCRldmVudClcIj5cblxuICAgICAgPG5nLXRlbXBsYXRlIG1hdFN0ZXBMYWJlbD57eydSRUdJU1RFUi5TVEVQX1BBU1NXT1JEJ3x0cmFuc2xhdGV9fTwvbmctdGVtcGxhdGU+XG5cbiAgICAgIDwhLS0gUGFzc3dvcmQgLS0+XG4gICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbcGxhY2Vob2xkZXJdPVwiJ1VTRVIuUEFTU1dPUkQnfHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJwYXNzd29yZFwiXG4gICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJzZWN0aW9uLXJlZCBuZXctcGFzc3dvcmRcIlxuICAgICAgICAgICAgICAgW3R5cGVdPVwic2hvd1B3ZCA/ICd0ZXh0JyA6ICdwYXNzd29yZCdcIlxuICAgICAgICAgICAgICAgcmVxdWlyZWQ+XG4gICAgICAgIDxidXR0b24gbWF0U3VmZml4IG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJzaG93UHdkID0gIXNob3dQd2RcIlxuICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIj5cbiAgICAgICAgICA8bWF0LWljb24+e3tzaG93UHdkID8gJ3Zpc2liaWxpdHlfb2ZmJyA6ICd2aXNpYmlsaXR5J319PC9tYXQtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJjb250cm9scy5wYXNzd29yZC5oYXNFcnJvcigncmVxdWlyZWQnKSAmJiBjb250cm9scy5wYXNzd29yZC50b3VjaGVkXCIgdHJhbnNsYXRlPkVSUk9SLkZJRUxEX1JFUVVJUkVEPC9tYXQtZXJyb3I+XG4gICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJjb250cm9scy5wYXNzd29yZC5oYXNFcnJvcignbWlubGVuZ3RoJykgJiYgY29udHJvbHMucGFzc3dvcmQudG91Y2hlZFwiPlxuICAgICAgICAgIDxzcGFuPnt7J0VSUk9SLkZJRUxEX01JTl9MRU5HVEgnIHwgdHJhbnNsYXRlOiB7bWluTGVuZ3RoOiA4fSB9fTwvc3Bhbj5cbiAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICA8IS0tIENvbmZpcm0gcGFzc3dvcmQgLS0+XG4gICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbcGxhY2Vob2xkZXJdPVwiJ1JFR0lTVEVSLkNPTkZJUk1fUEFTU1dPUkQnfHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJjb25maXJtUGFzc3dvcmRcIlxuICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwic2VjdGlvbi1yZWQgbmV3LXBhc3N3b3JkXCJcbiAgICAgICAgICAgICAgIFt0eXBlXT1cInNob3dDb25maXJtUHdkID8gJ3RleHQnIDogJ3Bhc3N3b3JkJ1wiXG4gICAgICAgICAgICAgICByZXF1aXJlZD5cbiAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNob3dDb25maXJtUHdkID0gIXNob3dDb25maXJtUHdkXCJcbiAgICAgICAgICAgICAgICB0YWJpbmRleD1cIi0xXCI+XG4gICAgICAgICAgPG1hdC1pY29uPnt7c2hvd0NvbmZpcm1Qd2QgPyAndmlzaWJpbGl0eV9vZmYnIDogJ3Zpc2liaWxpdHknfX08L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cImNvbnRyb2xzLmNvbmZpcm1QYXNzd29yZC5oYXNFcnJvcigncmVxdWlyZWQnKSAmJiBjb250cm9scy5jb25maXJtUGFzc3dvcmQudG91Y2hlZFwiIHRyYW5zbGF0ZT5FUlJPUi5GSUVMRF9SRVFVSVJFRDwvbWF0LWVycm9yPlxuICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwiY29udHJvbHMuY29uZmlybVBhc3N3b3JkLmhhc0Vycm9yKCdlcXVhbHMnKSAmJiBjb250cm9scy5jb25maXJtUGFzc3dvcmQudG91Y2hlZFwiPlxuICAgICAgICAgIDxzcGFuPnt7J1JFR0lTVEVSLkVSUk9SLk5PVF9TQU1FX1BBU1NXT1JEJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgPC9mb3JtPlxuICA8L21hdC1zdGVwPlxuXG5cbiAgPCEtLSBTdGVwIDM6IHVzZXIgZGV0YWlscyAtLT5cbiAgPG1hdC1zdGVwIFtzdGVwQ29udHJvbF09XCJmb3Jtc1syXVwiICpuZ0lmPVwiZm9ybXNbMl0uY29udHJvbHM7IGxldCBjb250cm9sc1wiPlxuXG4gICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3Jtc1syXVwiIChuZ1N1Ym1pdCk9XCJkb1N1Ym1pdCgkZXZlbnQpXCIgY2xhc3M9XCJmb3JtLWNvbnRhaW5lciBpb24tcGFkZGluZ1wiIChrZXl1cC5lbnRlcik9XCJkb1N1Ym1pdCgpXCI+XG5cbiAgICAgIDxuZy10ZW1wbGF0ZSBtYXRTdGVwTGFiZWw+e3snUkVHSVNURVIuU1RFUF9VU0VSX0RFVEFJTFMnfHRyYW5zbGF0ZX19PC9uZy10ZW1wbGF0ZT5cblxuICAgICAgPCEtLSBlcnJvciAtLT5cbiAgICAgIDxpb24taXRlbSAqbmdJZj1cImVycm9yICYmICFzZW5kaW5nXCIgbGluZXM9XCJub25lXCI+XG4gICAgICAgIDxpb24taWNvbiBjb2xvcj1cImRhbmdlclwiIHNsb3Q9XCJzdGFydFwiIG5hbWU9XCJhbGVydC1jaXJjbGVcIj48L2lvbi1pY29uPlxuICAgICAgICA8aW9uLWxhYmVsIGNvbG9yPVwiZGFuZ2VyXCIgY2xhc3M9XCJlcnJvclwiIFtpbm5lckhUTUxdPVwiZXJyb3J8dHJhbnNsYXRlXCI+PC9pb24tbGFiZWw+XG4gICAgICA8L2lvbi1pdGVtPlxuXG4gICAgICA8IS0tIExhc3QgbmFtZSAtLT5cbiAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPGlucHV0IG1hdElucHV0IFtwbGFjZWhvbGRlcl09XCInVVNFUi5MQVNUX05BTUUnfHRyYW5zbGF0ZVwiIGZvcm1Db250cm9sTmFtZT1cImxhc3ROYW1lXCIgYXV0b2NvbXBsZXRlPVwic2VjdGlvbi1ibHVlIGZhbWlseS1uYW1lXCJcbiAgICAgICAgICByZXF1aXJlZD5cbiAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cImNvbnRyb2xzLmxhc3ROYW1lLmhhc0Vycm9yKCdyZXF1aXJlZCcpICYmIGNvbnRyb2xzLmxhc3ROYW1lLmRpcnR5XCIgdHJhbnNsYXRlPkVSUk9SLkZJRUxEX1JFUVVJUkVEPC9tYXQtZXJyb3I+XG4gICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJjb250cm9scy5sYXN0TmFtZS5oYXNFcnJvcignbWlubGVuZ3RoJykgJiYgY29udHJvbHMubGFzdE5hbWUuZGlydHlcIj5cbiAgICAgICAgICA8c3Bhbj57eydFUlJPUi5GSUVMRF9NSU5fTEVOR1RIJyB8IHRyYW5zbGF0ZToge21pbkxlbmd0aDogMn0gfX08L3NwYW4+XG4gICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgPCEtLSBGaXJzdCBuYW1lIC0tPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgW3BsYWNlaG9sZGVyXT1cIidVU0VSLkZJUlNUX05BTUUnfHRyYW5zbGF0ZVwiIGZvcm1Db250cm9sTmFtZT1cImZpcnN0TmFtZVwiIGF1dG9jb21wbGV0ZT1cInNlY3Rpb24tYmx1ZSBnaXZlbi1uYW1lXCJcbiAgICAgICAgICByZXF1aXJlZD5cbiAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cImNvbnRyb2xzLmZpcnN0TmFtZS5oYXNFcnJvcigncmVxdWlyZWQnKSAmJiBjb250cm9scy5maXJzdE5hbWUuZGlydHlcIiB0cmFuc2xhdGU+RVJST1IuRklFTERfUkVRVUlSRUQ8L21hdC1lcnJvcj5cbiAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cImNvbnRyb2xzLmZpcnN0TmFtZS5oYXNFcnJvcignbWlubGVuZ3RoJykgJiYgY29udHJvbHMuZmlyc3ROYW1lLmRpcnR5XCI+XG4gICAgICAgICAgPHNwYW4+e3snRVJST1IuRklFTERfTUlOX0xFTkdUSCcgfCB0cmFuc2xhdGU6IHttaW5MZW5ndGg6IDJ9IH19PC9zcGFuPlxuICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgIDwhLS0gQWRkaXRpb25hbCBmaWVsZHMgLS0+XG4gICAgICA8YXBwLWZvcm0tZmllbGQgKm5nRm9yPVwibGV0IGZpZWxkIG9mIGFkZGl0aW9uYWxGaWVsZHNcIlxuICAgICAgICAgICAgICAgICAgICAgIFtkZWZpbml0aW9uXT1cImZpZWxkXCJcbiAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cInRydWVcIj5cbiAgICAgIDwvYXBwLWZvcm0tZmllbGQ+XG5cbiAgICA8L2Zvcm0+XG4gIDwvbWF0LXN0ZXA+XG48L21hdC1ob3Jpem9udGFsLXN0ZXBwZXI+XG4iXX0=