@seniorsistemas/angular-components 19.8.0 → 19.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. package/bignumber-input/lib/bignumber-input/bignumber-input.directive.d.ts +2 -1
  2. package/code-editor/lib/code-editor/core/facades/core-facade.d.ts +3 -1
  3. package/code-editor/lib/code-editor/infra/cores/codemirror-6/codemirror-6-core.d.ts +12 -2
  4. package/drawer/README.md +119 -0
  5. package/drawer/index.d.ts +5 -0
  6. package/{sidebar/lib/sidebar/sidebar.component.d.ts → drawer/lib/drawer/drawer.component.d.ts} +18 -15
  7. package/drawer/lib/drawer/drawer.module.d.ts +8 -0
  8. package/drawer/public-api.d.ts +2 -0
  9. package/esm2022/bignumber-input/lib/bignumber-input/bignumber-input.directive.mjs +6 -3
  10. package/esm2022/code-editor/lib/code-editor/core/facades/core-facade.mjs +7 -1
  11. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/codemirror-6-core.mjs +47 -22
  12. package/esm2022/drawer/lib/drawer/drawer.component.mjs +192 -0
  13. package/esm2022/drawer/lib/drawer/drawer.module.mjs +17 -0
  14. package/esm2022/drawer/public-api.mjs +3 -0
  15. package/esm2022/drawer/seniorsistemas-angular-components-drawer.mjs +5 -0
  16. package/esm2022/dynamic-form/dynamic-form/form-field/fields/bignumber/bignumber-field.component.mjs +4 -5
  17. package/esm2022/lib/locale/fallback.mjs +3 -2
  18. package/esm2022/select/lib/select/select.component.mjs +11 -14
  19. package/esm2022/side-sheet/lib/side-sheet/models/side-sheet-config.mjs +2 -0
  20. package/esm2022/side-sheet/lib/side-sheet/models/side-sheet-size.mjs +2 -0
  21. package/esm2022/side-sheet/lib/side-sheet/services/side-sheet.service.mjs +82 -0
  22. package/esm2022/side-sheet/lib/side-sheet/side-sheet.component.mjs +171 -0
  23. package/esm2022/side-sheet/public-api.mjs +3 -0
  24. package/esm2022/side-sheet/seniorsistemas-angular-components-side-sheet.mjs +5 -0
  25. package/esm2022/sidebar/public-api.mjs +12 -3
  26. package/esm2022/switch/lib/switch/switch.component.mjs +5 -3
  27. package/esm2022/switch/lib/switch/switch.module.mjs +2 -2
  28. package/esm2022/tabs/lib/tab-item/tab-item.component.mjs +4 -3
  29. package/esm2022/tabs/lib/tabs/tabs.component.mjs +14 -10
  30. package/esm2022/tiered-menu/lib/tiered-menu/components/tiered-menu/tiered-menu.component.mjs +82 -75
  31. package/esm2022/tiered-menu/lib/tiered-menu/components/tiered-menu-item/tiered-menu-item.component.mjs +3 -3
  32. package/esm2022/tiered-menu/lib/tiered-menu/components/tiered-menu-nested/tiered-menu-nested.component.mjs +35 -18
  33. package/esm2022/tiered-menu/lib/tiered-menu/services/tiered-menu.event.service.mjs +2 -1
  34. package/esm2022/tiered-menu/lib/tiered-menu/tiered-menu.directive.mjs +89 -77
  35. package/esm2022/toast/lib/toast/toast.service.mjs +2 -2
  36. package/fesm2022/seniorsistemas-angular-components-bignumber-input.mjs +5 -2
  37. package/fesm2022/seniorsistemas-angular-components-bignumber-input.mjs.map +1 -1
  38. package/fesm2022/seniorsistemas-angular-components-code-editor.mjs +52 -21
  39. package/fesm2022/seniorsistemas-angular-components-code-editor.mjs.map +1 -1
  40. package/fesm2022/seniorsistemas-angular-components-drawer.mjs +211 -0
  41. package/fesm2022/seniorsistemas-angular-components-drawer.mjs.map +1 -0
  42. package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs +3 -4
  43. package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs.map +1 -1
  44. package/fesm2022/seniorsistemas-angular-components-select.mjs +10 -13
  45. package/fesm2022/seniorsistemas-angular-components-select.mjs.map +1 -1
  46. package/fesm2022/seniorsistemas-angular-components-side-sheet.mjs +257 -0
  47. package/fesm2022/seniorsistemas-angular-components-side-sheet.mjs.map +1 -0
  48. package/fesm2022/seniorsistemas-angular-components-sidebar.mjs +10 -180
  49. package/fesm2022/seniorsistemas-angular-components-sidebar.mjs.map +1 -1
  50. package/fesm2022/seniorsistemas-angular-components-switch.mjs +5 -3
  51. package/fesm2022/seniorsistemas-angular-components-switch.mjs.map +1 -1
  52. package/fesm2022/seniorsistemas-angular-components-tabs.mjs +16 -11
  53. package/fesm2022/seniorsistemas-angular-components-tabs.mjs.map +1 -1
  54. package/fesm2022/seniorsistemas-angular-components-tiered-menu.mjs +201 -164
  55. package/fesm2022/seniorsistemas-angular-components-tiered-menu.mjs.map +1 -1
  56. package/fesm2022/seniorsistemas-angular-components-toast.mjs +1 -1
  57. package/fesm2022/seniorsistemas-angular-components-toast.mjs.map +1 -1
  58. package/fesm2022/seniorsistemas-angular-components.mjs +2 -1
  59. package/fesm2022/seniorsistemas-angular-components.mjs.map +1 -1
  60. package/package.json +19 -7
  61. package/select/lib/select/select.component.d.ts +2 -1
  62. package/side-sheet/README.md +184 -0
  63. package/side-sheet/index.d.ts +5 -0
  64. package/side-sheet/lib/side-sheet/models/side-sheet-config.d.ts +20 -0
  65. package/side-sheet/lib/side-sheet/models/side-sheet-size.d.ts +1 -0
  66. package/side-sheet/lib/side-sheet/services/side-sheet.service.d.ts +49 -0
  67. package/side-sheet/lib/side-sheet/side-sheet.component.d.ts +61 -0
  68. package/side-sheet/public-api.d.ts +4 -0
  69. package/sidebar/README.md +20 -93
  70. package/sidebar/public-api.d.ts +11 -2
  71. package/tabs/lib/tab-item/tab-item.component.d.ts +1 -0
  72. package/tabs/lib/tabs/tabs.component.d.ts +2 -1
  73. package/tiered-menu/lib/tiered-menu/components/tiered-menu/tiered-menu.component.d.ts +19 -7
  74. package/tiered-menu/lib/tiered-menu/components/tiered-menu-nested/tiered-menu-nested.component.d.ts +4 -3
  75. package/tiered-menu/lib/tiered-menu/services/tiered-menu.event.service.d.ts +1 -0
  76. package/tiered-menu/lib/tiered-menu/tiered-menu.directive.d.ts +6 -5
  77. package/esm2022/sidebar/lib/sidebar/sidebar.component.mjs +0 -169
  78. package/esm2022/sidebar/lib/sidebar/sidebar.module.mjs +0 -17
  79. package/sidebar/lib/sidebar/sidebar.module.d.ts +0 -8
@@ -1,4 +1,4 @@
1
- import { OnInit, OnChanges, SimpleChanges } from '@angular/core';
1
+ import { OnChanges, OnInit, SimpleChanges } from '@angular/core';
2
2
  import { AbstractControl, ValidationErrors } from '@angular/forms';
3
3
  import { NumericMaskDirective } from '@seniorsistemas/angular-components/numeric-mask';
4
4
  import * as i0 from "@angular/core";
@@ -92,6 +92,7 @@ export declare class BignumberInputDirective extends NumericMaskDirective implem
92
92
  pasteRejected: import("@angular/core").OutputEmitterRef<string>;
93
93
  private _decimalSeparatorExplicit;
94
94
  private _thousandSeparatorExplicit;
95
+ private _lastAutoPlaceholder;
95
96
  constructor();
96
97
  ngOnInit(): void;
97
98
  ngOnChanges(changes: SimpleChanges): void;
@@ -2,7 +2,7 @@ import { Observable } from 'rxjs';
2
2
  import { EditorOptions } from '../../models';
3
3
  import { Marker } from '../models';
4
4
  export declare abstract class CoreFacade {
5
- private readonly $onCoreFinishLoad;
5
+ private $onCoreFinishLoad;
6
6
  private readonly $onCodeChange;
7
7
  private readonly $onCodeValidityChange;
8
8
  private _completionItems;
@@ -23,6 +23,8 @@ export declare abstract class CoreFacade {
23
23
  protected abstract setCoreEditorOptions(options: EditorOptions): void;
24
24
  protected abstract highlightCode(markers: Marker[]): void;
25
25
  protected notifyCoreFinishLoad(): void;
26
+ protected resetCoreFinishLoad(): void;
27
+ protected resetLastCodeEmitted(): void;
26
28
  protected notifyCodeChange(code: string): void;
27
29
  protected updateCompletionItems(items: string[]): void;
28
30
  private setLinter;
@@ -6,12 +6,22 @@ import { Marker } from '../../../core/models';
6
6
  import { EditorOptions } from '../../../models';
7
7
  export declare class CodeMirror6Core extends CoreFacade {
8
8
  static readonly $onCompletionItemsUpdate: Subject<string[]>;
9
- private static readonly _ngUnsubscribe;
10
- private static _editorView;
9
+ /** Referência à instância ativa — usada pelos métodos estáticos de compatibilidade */
10
+ private static _activeInstance;
11
+ private _ngUnsubscribe;
12
+ private _editorView;
11
13
  private _codeReceivedBeforeViewCreation;
12
14
  private _editorOptionsReceivedBeforeViewCreation;
13
15
  constructor();
16
+ /**
17
+ * Acesso estático à EditorView da instância ativa.
18
+ * Mantido para compatibilidade com extensões (autocomplete TaxCalculation).
19
+ */
14
20
  static getEditorView(): EditorView;
21
+ /**
22
+ * Dispatch estático na EditorView da instância ativa.
23
+ * Mantido para compatibilidade com extensões (autocomplete TaxCalculation).
24
+ */
15
25
  static updateEditorView(...transactionSpecs: TransactionSpec[]): void;
16
26
  setCoreWrapperElement(element: HTMLDivElement): void;
17
27
  setCode(code: string): void;
@@ -0,0 +1,119 @@
1
+ # Drawer
2
+
3
+ ![Status](https://img.shields.io/badge/status-stable-brightgreen)
4
+
5
+ Componente de painel lateral deslizante que aparece sobre o conteúdo vindo do lado direito da tela. Suporta templates customizados para cabeçalho, corpo e rodapé via `sTemplate`, bloqueio automático de scroll e confirmação de fechamento.
6
+
7
+ Também responde ao seletor legado `s-sidebar` (deprecado, será removido na versão 20.0.0 — ver [`Sidebar`](../sidebar/README.md)).
8
+
9
+ ## Quando usar
10
+
11
+ - Exibir detalhes de um item selecionado sem sair da página atual
12
+ - Formulários simples de edição rápida sem necessidade de uma nova rota
13
+ - Painéis de filtros avançados em listas e tabelas
14
+ - Configurações ou propriedades de um elemento da interface
15
+ - Fluxos complementares que não devem interromper o contexto principal
16
+
17
+ ## Quando não usar
18
+
19
+ - Confirmações de ações destrutivas — prefira `ConfirmDialog`
20
+ - Conteúdo crítico que exige atenção exclusiva do usuário — prefira `Dialog` modal
21
+ - Navegação principal da aplicação — prefira um menu lateral (`nav`) fixo
22
+
23
+ ## Instalação
24
+
25
+ ```typescript
26
+ import { DrawerModule } from '@seniorsistemas/angular-components/drawer';
27
+
28
+ @NgModule({ imports: [DrawerModule] })
29
+ export class MeuModule {}
30
+ ```
31
+
32
+ ## Uso básico
33
+
34
+ ```html
35
+ <s-drawer [(visible)]="drawerAberto" header="Detalhes">
36
+ <p>Conteúdo do painel lateral.</p>
37
+ </s-drawer>
38
+
39
+ <button (click)="drawerAberto = true">Abrir Drawer</button>
40
+ ```
41
+
42
+ ## API
43
+
44
+ ### Inputs
45
+
46
+ | Propriedade | Tipo | Padrão | Obrigatório | Descrição |
47
+ |-------------|------|--------|:-----------:|-----------|
48
+ | `visible` | `ModelSignal<boolean>` | `false` | Não | Controla a visibilidade do drawer. Suporta `[(visible)]` |
49
+ | `closable` | `boolean` | `true` | Não | Exibe o botão de fechar (X) no cabeçalho |
50
+ | `dismissible` | `boolean` | `true` | Não | Fechar ao clicar no backdrop (área escurecida fora do painel) |
51
+ | `closeOnEscape` | `boolean` | `true` | Não | Fechar ao pressionar a tecla Escape |
52
+ | `header` | `string` | `undefined` | Não | Texto exibido no cabeçalho padrão. Substituível via `sTemplate="header"` |
53
+ | `largeSized` | `boolean` | `false` | Não | Aumenta a largura do drawer para acomodar mais conteúdo |
54
+ | `cache` | `boolean` | `false` | Não | Mantém o conteúdo no DOM quando fechado, preservando estado interno |
55
+ | `registerConfirmClose` | `() => boolean` | `() => true` | Não | Função chamada antes de fechar; retornar `false` bloqueia o fechamento |
56
+
57
+ ## Exemplos
58
+
59
+ ### Drawer básico
60
+
61
+ ```html
62
+ <s-drawer [(visible)]="visible" header="Filtros Avançados" [closable]="true">
63
+ <p>Conteúdo do painel.</p>
64
+ </s-drawer>
65
+ <s-button label="Abrir" (clicked)="visible = true"></s-button>
66
+ ```
67
+
68
+ ### Drawer grande
69
+
70
+ ```html
71
+ <s-drawer [(visible)]="visible" header="Edição de Registro" [largeSized]="true">
72
+ <!-- formulário complexo -->
73
+ </s-drawer>
74
+ ```
75
+
76
+ ### Com templates customizados
77
+
78
+ ```html
79
+ <s-drawer [(visible)]="visible">
80
+ <ng-template sTemplate="header">
81
+ <div style="display: flex; align-items: center; gap: 8px;">
82
+ <i class="fa fa-filter"></i>
83
+ <span>Filtros Avançados</span>
84
+ </div>
85
+ </ng-template>
86
+ <ng-template sTemplate="body">
87
+ <!-- conteúdo do painel -->
88
+ </ng-template>
89
+ <ng-template sTemplate="footer">
90
+ <s-button label="Aplicar" priority="primary" (clicked)="visible = false"></s-button>
91
+ </ng-template>
92
+ </s-drawer>
93
+ ```
94
+
95
+ ### Com confirmação de fechamento
96
+
97
+ ```typescript
98
+ confirmClose = (): boolean => {
99
+ return window.confirm('Deseja realmente fechar? As alterações serão perdidas.');
100
+ };
101
+ ```
102
+
103
+ ```html
104
+ <s-drawer [(visible)]="visible" [registerConfirmClose]="confirmClose">
105
+ <!-- formulário com alterações não salvas -->
106
+ </s-drawer>
107
+ ```
108
+
109
+ ## Acessibilidade
110
+
111
+ - O drawer utiliza `cdkTrapFocus` para aprisionar o foco dentro do painel enquanto aberto
112
+ - Pressionar `Escape` fecha o drawer quando `closeOnEscape = true`
113
+ - O painel entra e sai com animação de deslizamento (300ms) vindo da direita
114
+ - Ao abrir, o scroll da página é bloqueado automaticamente e restaurado ao fechar
115
+
116
+ ## Componentes relacionados
117
+
118
+ - [`Dialog`](../dialog/README.md) — modal centralizado para confirmações e conteúdo crítico
119
+ - [`SlideInBar`](../slide-in-bar/README.md) — painel que expande/colapsa embutido no layout
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ /// <amd-module name="@seniorsistemas/angular-components/drawer" />
5
+ export * from './public-api';
@@ -2,66 +2,69 @@ import { AfterContentInit, OnDestroy, QueryList, TemplateRef } from '@angular/co
2
2
  import { FooterComponent } from '@seniorsistemas/angular-components/structure';
3
3
  import { TemplateDirective } from '@seniorsistemas/angular-components/template';
4
4
  import * as i0 from "@angular/core";
5
+ import * as i1 from "@seniorsistemas/angular-components/common/deprecated-selector";
5
6
  /**
6
- * @description Componente de painel lateral deslizante (sidebar) que aparece sobre o conteúdo
7
+ * @description Componente de painel lateral deslizante (drawer) que aparece sobre o conteúdo
7
8
  * vindo do lado direito da tela. Suporta templates customizados para cabeçalho, corpo e rodapé
8
9
  * via `sTemplate`, bloqueio de scroll automático e confirmação de fechamento.
9
10
  *
11
+ * Também responde ao seletor legado `s-sidebar`.
12
+ *
10
13
  * @example
11
14
  * ```html
12
- * <s-sidebar [(visible)]="sidebarOpen" header="Filtros" [closable]="true">
15
+ * <s-drawer [(visible)]="drawerOpen" header="Filtros" [closable]="true">
13
16
  * <ng-template sTemplate="body">Conteúdo</ng-template>
14
- * </s-sidebar>
17
+ * </s-drawer>
15
18
  * ```
16
19
  *
17
20
  * @category Overlay
18
21
  */
19
- export declare class SidebarComponent implements AfterContentInit, OnDestroy {
22
+ export declare class DrawerComponent implements AfterContentInit, OnDestroy {
20
23
  templates: QueryList<TemplateDirective> | null;
21
24
  /**
22
- * @description Controla a visibilidade da sidebar. Suporta two-way binding via `[(visible)]`.
25
+ * @description Controla a visibilidade do drawer. Suporta two-way binding via `[(visible)]`.
23
26
  *
24
27
  * @default false
25
28
  */
26
29
  visible: import("@angular/core").ModelSignal<boolean>;
27
30
  /**
28
- * @description Quando `true`, exibe o botão de fechar (X) no cabeçalho da sidebar.
31
+ * @description Quando `true`, exibe o botão de fechar (X) no cabeçalho do drawer.
29
32
  *
30
33
  * @default true
31
34
  */
32
35
  closable: boolean;
33
36
  /**
34
- * @description Quando `true`, clicar no backdrop (área escurecida fora da sidebar) fecha o painel.
37
+ * @description Quando `true`, clicar no backdrop (área escurecida fora do drawer) fecha o painel.
35
38
  *
36
39
  * @default true
37
40
  */
38
41
  dismissible: boolean;
39
42
  /**
40
- * @description Quando `true`, pressionar a tecla Escape fecha a sidebar.
43
+ * @description Quando `true`, pressionar a tecla Escape fecha o drawer.
41
44
  *
42
45
  * @default true
43
46
  */
44
47
  closeOnEscape: boolean;
45
48
  /**
46
- * @description Texto exibido no cabeçalho padrão da sidebar.
49
+ * @description Texto exibido no cabeçalho padrão do drawer.
47
50
  * Pode ser substituído por um template customizado via `sTemplate="header"`.
48
51
  */
49
52
  header?: string;
50
53
  /**
51
- * @description Quando `true`, aumenta a largura da sidebar para acomodar mais conteúdo.
54
+ * @description Quando `true`, aumenta a largura do drawer para acomodar mais conteúdo.
52
55
  *
53
56
  * @default false
54
57
  */
55
58
  largeSized: boolean;
56
59
  /**
57
- * @description Quando `true`, mantém o conteúdo da sidebar no DOM mesmo quando oculta,
60
+ * @description Quando `true`, mantém o conteúdo do drawer no DOM mesmo quando oculto,
58
61
  * preservando o estado interno dos componentes filhos.
59
62
  *
60
63
  * @default false
61
64
  */
62
65
  cache: boolean;
63
66
  /**
64
- * @description Função de confirmação chamada antes de fechar a sidebar.
67
+ * @description Função de confirmação chamada antes de fechar o drawer.
65
68
  * Quando retornar `false`, o fechamento é bloqueado. Útil para validar formulários não salvos.
66
69
  */
67
70
  set registerConfirmClose(fn: () => boolean);
@@ -73,13 +76,13 @@ export declare class SidebarComponent implements AfterContentInit, OnDestroy {
73
76
  private readonly visibleEffect;
74
77
  ngAfterContentInit(): void;
75
78
  ngOnDestroy(): void;
76
- closeSidebar(): void;
79
+ closeDrawer(): void;
77
80
  handleEscape(): void;
78
81
  private _getCustomTemplate;
79
82
  private getHeaderTemplate;
80
83
  private getBodyTemplate;
81
84
  private getFooterTemplate;
82
85
  private _getTemplates;
83
- static ɵfac: i0.ɵɵFactoryDeclaration<SidebarComponent, never>;
84
- static ɵcmp: i0.ɵɵComponentDeclaration<SidebarComponent, "s-sidebar", never, { "visible": { "alias": "visible"; "required": false; "isSignal": true; }; "closable": { "alias": "closable"; "required": false; }; "dismissible": { "alias": "dismissible"; "required": false; }; "closeOnEscape": { "alias": "closeOnEscape"; "required": false; }; "header": { "alias": "header"; "required": false; }; "largeSized": { "alias": "largeSized"; "required": false; }; "cache": { "alias": "cache"; "required": false; }; "registerConfirmClose": { "alias": "registerConfirmClose"; "required": false; }; }, { "visible": "visibleChange"; }, ["footerComponent", "templates"], [":not(s-footer)", "s-footer"], true, never>;
86
+ static ɵfac: i0.ɵɵFactoryDeclaration<DrawerComponent, never>;
87
+ static ɵcmp: i0.ɵɵComponentDeclaration<DrawerComponent, "s-drawer, s-sidebar", never, { "visible": { "alias": "visible"; "required": false; "isSignal": true; }; "closable": { "alias": "closable"; "required": false; }; "dismissible": { "alias": "dismissible"; "required": false; }; "closeOnEscape": { "alias": "closeOnEscape"; "required": false; }; "header": { "alias": "header"; "required": false; }; "largeSized": { "alias": "largeSized"; "required": false; }; "cache": { "alias": "cache"; "required": false; }; "registerConfirmClose": { "alias": "registerConfirmClose"; "required": false; }; }, { "visible": "visibleChange"; }, ["footerComponent", "templates"], [":not(s-footer)", "s-footer"], true, [{ directive: typeof i1.DeprecatedSelectorDirective; inputs: {}; outputs: {}; }]>;
85
88
  }
@@ -0,0 +1,8 @@
1
+ import * as i0 from "@angular/core";
2
+ import * as i1 from "./drawer.component";
3
+ import * as i2 from "@seniorsistemas/angular-components/template";
4
+ export declare class DrawerModule {
5
+ static ɵfac: i0.ɵɵFactoryDeclaration<DrawerModule, never>;
6
+ static ɵmod: i0.ɵɵNgModuleDeclaration<DrawerModule, never, [typeof i1.DrawerComponent], [typeof i1.DrawerComponent, typeof i2.TemplateModule]>;
7
+ static ɵinj: i0.ɵɵInjectorDeclaration<DrawerModule>;
8
+ }
@@ -0,0 +1,2 @@
1
+ export { DrawerComponent } from './lib/drawer/drawer.component';
2
+ export { DrawerModule } from './lib/drawer/drawer.module';
@@ -93,6 +93,7 @@ export class BignumberInputDirective extends NumericMaskDirective {
93
93
  pasteRejected = output();
94
94
  _decimalSeparatorExplicit = false;
95
95
  _thousandSeparatorExplicit = false;
96
+ _lastAutoPlaceholder;
96
97
  constructor() {
97
98
  super();
98
99
  }
@@ -209,9 +210,11 @@ export class BignumberInputDirective extends NumericMaskDirective {
209
210
  }
210
211
  updatePlaceholder() {
211
212
  const scale = this.scale();
212
- if (!this.placeholder() && scale) {
213
- this.placeholder.set(`0${this.decimalSeparator()}${''.padEnd(scale, '0')}`);
213
+ const autoPlaceholder = scale ? `0${this.decimalSeparator()}${''.padEnd(scale, '0')}` : '0';
214
+ if (this.placeholder() === undefined || this.placeholder() === this._lastAutoPlaceholder) {
215
+ this.placeholder.set(autoPlaceholder);
214
216
  }
217
+ this._lastAutoPlaceholder = autoPlaceholder;
215
218
  }
216
219
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: BignumberInputDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
217
220
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.14", type: BignumberInputDirective, isStandalone: true, selector: "input[sBignumberInput]", inputs: { precision: { classPropertyName: "precision", publicName: "precision", isSignal: true, isRequired: false, transformFunction: null }, scale: { classPropertyName: "scale", publicName: "scale", isSignal: true, isRequired: false, transformFunction: null }, minDecimalPlaces: { classPropertyName: "minDecimalPlaces", publicName: "minDecimalPlaces", isSignal: true, isRequired: false, transformFunction: null }, maxDecimalPlaces: { classPropertyName: "maxDecimalPlaces", publicName: "maxDecimalPlaces", isSignal: true, isRequired: false, transformFunction: null }, decimalSeparator: { classPropertyName: "decimalSeparator", publicName: "decimalSeparator", isSignal: true, isRequired: false, transformFunction: null }, thousandsSeparator: { classPropertyName: "thousandsSeparator", publicName: "thousandsSeparator", isSignal: true, isRequired: false, transformFunction: null }, thousandSeparator: { classPropertyName: "thousandSeparator", publicName: "thousandSeparator", isSignal: true, isRequired: false, transformFunction: null }, alignTo: { classPropertyName: "alignTo", publicName: "alignTo", isSignal: true, isRequired: false, transformFunction: null }, allowNegative: { classPropertyName: "allowNegative", publicName: "allowNegative", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { minDecimalPlaces: "minDecimalPlacesChange", maxDecimalPlaces: "maxDecimalPlacesChange", decimalSeparator: "decimalSeparatorChange", thousandSeparator: "thousandSeparatorChange", placeholder: "placeholderChange", pasteRejected: "pasteRejected" }, host: { properties: { "attr.placeholder": "placeholder()", "attr.maxLength": "maxLength" } }, providers: [
@@ -242,4 +245,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
242
245
  standalone: true,
243
246
  }]
244
247
  }], ctorParameters: () => [] });
245
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmlnbnVtYmVyLWlucHV0LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY29tcG9uZW50cy9iaWdudW1iZXItaW5wdXQvc3JjL2xpYi9iaWdudW1iZXItaW5wdXQvYmlnbnVtYmVyLWlucHV0LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQzlHLE9BQU8sRUFBRSxpQkFBaUIsRUFBcUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUV0RixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpREFBaUQsQ0FBQzs7QUFFdkY7O0dBRUc7QUFDSCxNQUFNLENBQU4sSUFBWSx3QkFHWDtBQUhELFdBQVksd0JBQXdCO0lBQ2hDLDJDQUFlLENBQUE7SUFDZix5Q0FBYSxDQUFBO0FBQ2pCLENBQUMsRUFIVyx3QkFBd0IsS0FBeEIsd0JBQXdCLFFBR25DO0FBRUQ7Ozs7Ozs7Ozs7OztHQVlHO0FBaUJILE1BQU0sT0FBTyx1QkFBd0IsU0FBUSxvQkFBb0I7SUFDN0Q7Ozs7Ozs7OztPQVNHO0lBQ0ksU0FBUyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUU3Qjs7Ozs7O09BTUc7SUFDSSxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRXhCOzs7O09BSUc7SUFDYSxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFNUM7Ozs7T0FJRztJQUNhLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUU1Qzs7O09BR0c7SUFDYSxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFOUM7OztPQUdHO0lBQ0ksa0JBQWtCLEdBQUcsS0FBSyxDQUFxQixT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QUNyRCxXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLHVCQUF1QixDQUFDO2dCQUN0RCxLQUFLLEVBQUUsSUFBSTthQUNkO1NBQ0o7OzRGQUdRLHVCQUF1QjtrQkFoQm5DLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLHdCQUF3QjtvQkFDbEMsSUFBSSxFQUFFO3dCQUNGLG9CQUFvQixFQUFFLGVBQWU7d0JBQ3JDLGtCQUFrQixFQUFFLFdBQVc7cUJBQ2xDO29CQUNELFNBQVMsRUFBRTt3QkFDUDs0QkFDSSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixxREFBcUQ7NEJBQ3JELFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLHdCQUF3QixDQUFDOzRCQUN0RCxLQUFLLEVBQUUsSUFBSTt5QkFDZDtxQkFDSjtvQkFDRCxVQUFVLEVBQUUsSUFBSTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIGZvcndhcmRSZWYsIGlucHV0LCBtb2RlbCwgT25Jbml0LCBPbkNoYW5nZXMsIG91dHB1dCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBOR19WQUxVRV9BQ0NFU1NPUiwgQWJzdHJhY3RDb250cm9sLCBWYWxpZGF0aW9uRXJyb3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5cclxuaW1wb3J0IHsgTnVtZXJpY01hc2tEaXJlY3RpdmUgfSBmcm9tICdAc2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzL251bWVyaWMtbWFzayc7XHJcblxyXG4vKipcclxuICogQGRlcHJlY2F0ZWQgRXN0ZSBlbnVtIG7Do28gdGVtIG1haXMgZWZlaXRvLiBPIGFsaW5oYW1lbnRvIGRvIGNhbXBvIMOpIHNlbXByZSBgJ3JpZ2h0J2AuXHJcbiAqL1xyXG5leHBvcnQgZW51bSBCaWdudW1iZXJBbGlnbm1lbnRPcHRpb24ge1xyXG4gICAgUklHSFQgPSAncmlnaHQnLFxyXG4gICAgTEVGVCA9ICdsZWZ0JyxcclxufVxyXG5cclxuLyoqXHJcbiAqIEBkZXByZWNhdGVkIFV0aWxpemUgYSBkaXJldGl2YSBgQmlnTnVtYmVySW5wdXRgIGFvIGludsOpcyBkZXN0YS5cclxuICogQGRlc2NyaXB0aW9uIERpcmV0aXZhIGRlIG3DoXNjYXJhIHBhcmEgY2FtcG9zIGRlIGVudHJhZGEgZGUgbsO6bWVyb3MgZGUgZ3JhbmRlIHByZWNpc8OjbyxcclxuICogYWRhcHRhZGEgZG8gYEN1cnJlbmN5TWFza0RpcmVjdGl2ZWAuIFBlcm1pdGUgY29uZmlndXJhciBwcmVjaXPDo28sIGVzY2FsYSxcclxuICogc2VwYXJhZG9yZXMgZGVjaW1haXMgZSBkZSBtaWxoYXIgZGUgYWNvcmRvIGNvbSBvIGxvY2FsZSBkYSBhcGxpY2HDp8Ojby5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogYGBgaHRtbFxyXG4gKiA8aW5wdXQgc0JpZ251bWJlcklucHV0IFtwcmVjaXNpb25dPVwiMTVcIiBbc2NhbGVdPVwiMlwiIFthbGxvd05lZ2F0aXZlXT1cImZhbHNlXCIgLz5cclxuICogYGBgXHJcbiAqXHJcbiAqIEBjYXRlZ29yeSBJbnB1dHNcclxuICovXHJcbkBEaXJlY3RpdmUoe1xyXG4gICAgc2VsZWN0b3I6ICdpbnB1dFtzQmlnbnVtYmVySW5wdXRdJyxcclxuICAgIGhvc3Q6IHtcclxuICAgICAgICAnW2F0dHIucGxhY2Vob2xkZXJdJzogJ3BsYWNlaG9sZGVyKCknLFxyXG4gICAgICAgICdbYXR0ci5tYXhMZW5ndGhdJzogJ21heExlbmd0aCcsXHJcbiAgICB9LFxyXG4gICAgcHJvdmlkZXJzOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgICAgICAgICAgLy8gTk9TT05BUiAtICdCaWdudW1iZXJJbnB1dERpcmVjdGl2ZScgaXMgZGVwcmVjYXRlZC5cclxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQmlnbnVtYmVySW5wdXREaXJlY3RpdmUpLFxyXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZSxcclxuICAgICAgICB9LFxyXG4gICAgXSxcclxuICAgIHN0YW5kYWxvbmU6IHRydWUsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBCaWdudW1iZXJJbnB1dERpcmVjdGl2ZSBleHRlbmRzIE51bWVyaWNNYXNrRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gTsO6bWVybyB0b3RhbCBkZSBkw61naXRvcyBzaWduaWZpY2F0aXZvcyBhY2VpdG9zIHBlbG8gY2FtcG8gKHBhcnRlIGludGVpcmEgKyBwYXJ0ZSBkZWNpbWFsKS5cclxuICAgICAqXHJcbiAgICAgKiBEdXJhbnRlIGEgZGlnaXRhw6fDo28sIG8gY2FtcG8gbGltaXRhIGZpc2ljYW1lbnRlIG8gbsO6bWVybyBkZSBjYXJhY3RlcmVzIHZpYSBgbWF4TGVuZ3RoYC5cclxuICAgICAqIEFvIGNvbGFyIHVtIHZhbG9yIHF1ZSB1bHRyYXBhc3NlIG8gbGltaXRlLCBvIGV2ZW50byBgcGFzdGVSZWplY3RlZGAgw6kgZW1pdGlkbyBlIGEgY29sYWdlbSDDqSBjYW5jZWxhZGEuXHJcbiAgICAgKiBBcMOzcyBzYWlyIGRvIGNhbXBvIChibHVyKSBvdSBhbyBzdWJtZXRlciBvIGZvcm11bMOhcmlvLCBzZSBvIHZhbG9yIHVsdHJhcGFzc2FyIGBwcmVjaXNpb25gLFxyXG4gICAgICogbyBjYW1wbyBmaWNhcsOhIGludsOhbGlkbyBjb20gbyBlcnJvIGBleGNlZWRzUHJlY2lzaW9uOiB7IHByZWNpc2lvbiwgYWN0dWFsIH1gLlxyXG4gICAgICpcclxuICAgICAqIEBkZWZhdWx0IDE1XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBwcmVjaXNpb24gPSBpbnB1dCgxNSk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVwcmVjYXRlZCBVc2UgYG1pbkRlY2ltYWxQbGFjZXNgIGUgYG1heERlY2ltYWxQbGFjZXNgIGFvIGludsOpcyBkZXN0ZS5cclxuICAgICAqIEBkZXNjcmlwdGlvbiBOw7ptZXJvIGRlIGNhc2FzIGRlY2ltYWlzIGV4aWJpZGFzIGUgYWNlaXRhcyBwZWxvIGNhbXBvLlxyXG4gICAgICogUXVhbmRvIGluZm9ybWFkbywgcmVwYXNzYSBvIHZhbG9yIHBhcmEgYG1pbkRlY2ltYWxQbGFjZXNgIGUgYG1heERlY2ltYWxQbGFjZXNgLlxyXG4gICAgICpcclxuICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAqL1xyXG4gICAgcHVibGljIHNjYWxlID0gaW5wdXQoMCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gTsO6bWVybyBtw61uaW1vIGRlIGNhc2FzIGRlY2ltYWlzIGV4aWJpZGFzLlxyXG4gICAgICpcclxuICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAqL1xyXG4gICAgcHVibGljIG92ZXJyaWRlIG1pbkRlY2ltYWxQbGFjZXMgPSBtb2RlbCgwKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBOw7ptZXJvIG3DoXhpbW8gZGUgY2FzYXMgZGVjaW1haXMgYWNlaXRhcy5cclxuICAgICAqXHJcbiAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvdmVycmlkZSBtYXhEZWNpbWFsUGxhY2VzID0gbW9kZWwoMCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gU2VwYXJhZG9yIGRlY2ltYWwgcGVyc29uYWxpemFkby4gUXVhbmRvIG7Do28gaW5mb3JtYWRvLFxyXG4gICAgICogdXRpbGl6YSBvIHNlcGFyYWRvciBkZWZpbmlkbyBwZWxvIGxvY2FsZSBhdGl2byBkYSBhcGxpY2HDp8Ojby5cclxuICAgICAqL1xyXG4gICAgcHVibGljIG92ZXJyaWRlIGRlY2ltYWxTZXBhcmF0b3IgPSBtb2RlbCgnLCcpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlcHJlY2F0ZWQgVXNlIGB0aG91c2FuZFNlcGFyYXRvcmAgYW8gaW52w6lzIGRlc3RlLlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFNlcGFyYWRvciBkZSBtaWxoYXIgcGVyc29uYWxpemFkby4gUmVjb21lbmRhLXNlIG1pZ3JhciBwYXJhIGB0aG91c2FuZFNlcGFyYXRvcmAuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB0aG91c2FuZHNTZXBhcmF0b3IgPSBpbnB1dDxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gU2VwYXJhZG9yIGRlIG1pbGhhciBwZXJzb25hbGl6YWRvLiBRdWFuZG8gbsOjbyBpbmZvcm1hZG8sXHJcbiAgICAgKiB1dGlsaXphIG8gc2VwYXJhZG9yIGRlZmluaWRvIHBlbG8gbG9jYWxlIGF0aXZvIGRhIGFwbGljYcOnw6NvLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb3ZlcnJpZGUgdGhvdXNhbmRTZXBhcmF0b3IgPSBtb2RlbCgnLicpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlcHJlY2F0ZWQgRXN0ZSBpbnB1dCBuw6NvIHRlbSBtYWlzIGVmZWl0byBlIHBvZGUgc2VyIHJlbW92aWRvLlxyXG4gICAgICogTyBhbGluaGFtZW50byBkbyBjYW1wbyDDqSBzZW1wcmUgYCdyaWdodCdgLCBjb25mb3JtZSBvIGNvbXBvcnRhbWVudG8gcGFkcsOjbyBkYSBtw6FzY2FyYSBudW3DqXJpY2EuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhbGlnblRvID0gaW5wdXQ8J2xlZnQnIHwgJ3JpZ2h0Jz4oJ3JpZ2h0Jyk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gUGVybWl0ZSBhIGVudHJhZGEgZGUgdmFsb3JlcyBuZWdhdGl2b3MuXHJcbiAgICAgKlxyXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb3ZlcnJpZGUgYWxsb3dOZWdhdGl2ZSA9IGlucHV0KHRydWUpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFRleHRvIGRlIHBsYWNlaG9sZGVyIGV4aWJpZG8gcXVhbmRvIG8gY2FtcG8gZXN0w6EgdmF6aW8uXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBwbGFjZWhvbGRlciA9IG1vZGVsPHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcclxuXHJcbiAgICBwdWJsaWMgbWF4TGVuZ3RoPzogbnVtYmVyO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEVtaXRpZG8gcXVhbmRvIHVtYSBjb2xhZ2VtIChwYXN0ZSkgw6kgcmVqZWl0YWRhIHBlbGEgdmFsaWRhw6fDo28gZG8gY2FtcG8uXHJcbiAgICAgKiBFbWl0ZSBhIHN0cmluZyBjb2xhZGEgcXVlIGZvaSByZWN1c2FkYS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHBhc3RlUmVqZWN0ZWQgPSBvdXRwdXQ8c3RyaW5nPigpO1xyXG5cclxuICAgIHByaXZhdGUgX2RlY2ltYWxTZXBhcmF0b3JFeHBsaWNpdCA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBfdGhvdXNhbmRTZXBhcmF0b3JFeHBsaWNpdCA9IGZhbHNlO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG92ZXJyaWRlIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVQbGFjZWhvbGRlcigpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIG5nT25DaGFuZ2VzIGhhbmRsZXMgYWxsIHNpZ25hbCB3cml0ZXMgcmVhY3RpdmVseSwgYXZvaWRpbmcgdGhlIG5lZWQgZm9yXHJcbiAgICAvLyBlZmZlY3QoKSB3aXRoIGFsbG93U2lnbmFsV3JpdGVzLiBUaGUgZGVjaW1hbFNlcGFyYXRvci90aG91c2FuZFNlcGFyYXRvciBpbnB1dHNcclxuICAgIC8vIGhhdmUgdHJ1dGh5IGRlZmF1bHRzLCBzbyBuZ09uQ2hhbmdlcyBpcyBuZWNlc3NhcnkgdG8gZGlzdGluZ3Vpc2ggXCJwYXJlbnQgYm91bmQgdGhpc1wiXHJcbiAgICAvLyBmcm9tIFwiaXQncyBqdXN0IHRoZSBkZWZhdWx0IHZhbHVlXCIuXHJcbiAgICBwdWJsaWMgb3ZlcnJpZGUgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgICAgIGlmIChjaGFuZ2VzWydkZWNpbWFsU2VwYXJhdG9yJ10gJiYgdGhpcy5kZWNpbWFsU2VwYXJhdG9yKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5fZGVjaW1hbFNlcGFyYXRvckV4cGxpY2l0ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNoYW5nZXNbJ3Rob3VzYW5kU2VwYXJhdG9yJ10gJiYgdGhpcy50aG91c2FuZFNlcGFyYXRvcigpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3Rob3VzYW5kU2VwYXJhdG9yRXhwbGljaXQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY2hhbmdlc1sndGhvdXNhbmRzU2VwYXJhdG9yJ10pIHtcclxuICAgICAgICAgICAgY29uc3QgdmFsID0gdGhpcy50aG91c2FuZHNTZXBhcmF0b3IoKTtcclxuICAgICAgICAgICAgaWYgKHZhbCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl90aG91c2FuZFNlcGFyYXRvckV4cGxpY2l0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMudGhvdXNhbmRTZXBhcmF0b3Iuc2V0KHZhbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNoYW5nZXNbJ3NjYWxlJ10pIHtcclxuICAgICAgICAgICAgdGhpcy5taW5EZWNpbWFsUGxhY2VzLnNldCh0aGlzLnNjYWxlKCkpO1xyXG4gICAgICAgICAgICB0aGlzLm1heERlY2ltYWxQbGFjZXMuc2V0KHRoaXMuc2NhbGUoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgY2hhbmdlc1snc2NhbGUnXSB8fFxyXG4gICAgICAgICAgICBjaGFuZ2VzWydkZWNpbWFsU2VwYXJhdG9yJ10gfHxcclxuICAgICAgICAgICAgY2hhbmdlc1sndGhvdXNhbmRTZXBhcmF0b3InXSB8fFxyXG4gICAgICAgICAgICBjaGFuZ2VzWyd0aG91c2FuZHNTZXBhcmF0b3InXSB8fFxyXG4gICAgICAgICAgICBjaGFuZ2VzWydwcmVjaXNpb24nXVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICB0aGlzLmNhbGN1bGF0ZU1heExlbmd0aCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY2hhbmdlc1snc2NhbGUnXSB8fCBjaGFuZ2VzWydkZWNpbWFsU2VwYXJhdG9yJ10pIHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVQbGFjZWhvbGRlcigpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE92ZXJyaWRlcyBiYXNlIHBhc3RlIGhhbmRsZXIgdG8gYWRkIHByZWNpc2lvbiB2YWxpZGF0aW9uLlxyXG4gICAgICogSWYgdGhlIHBhc3RlZCB2YWx1ZSBleGNlZWRzIGBwcmVjaXNpb25gIGRpZ2l0cywgdGhlIHBhc3RlIGlzIHJlamVjdGVkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb3ZlcnJpZGUgb25QYXN0ZShldmVudDogQ2xpcGJvYXJkRXZlbnQpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBwYXN0ZWRUZXh0ID0gZXZlbnQuY2xpcGJvYXJkRGF0YT8uZ2V0RGF0YSgndGV4dCcpID8/ICcnO1xyXG4gICAgICAgIGNvbnN0IGVmZmVjdGl2ZVRob3VzYW5kU2VwID0gdGhpcy50aG91c2FuZHNTZXBhcmF0b3IoKSA/PyB0aGlzLnRob3VzYW5kU2VwYXJhdG9yKCk7XHJcbiAgICAgICAgY29uc3QgbnVtZXJpY1RleHQgPSBwYXN0ZWRUZXh0XHJcbiAgICAgICAgICAgIC5yZXBsYWNlKG5ldyBSZWdFeHAoYFxcXFwke2VmZmVjdGl2ZVRob3VzYW5kU2VwfWAsICdnJyksICcnKVxyXG4gICAgICAgICAgICAucmVwbGFjZSh0aGlzLmRlY2ltYWxTZXBhcmF0b3IoKSwgJy4nKTtcclxuICAgICAgICBjb25zdCBbaW50UGFydCwgZGVjaW1hbFBhcnQgPSAnJ10gPSBudW1lcmljVGV4dC5zcGxpdCgnLicpO1xyXG4gICAgICAgIGNvbnN0IHRvdGFsRGlnaXRzID0gaW50UGFydC5yZXBsYWNlKC9cXEQvZywgJycpLmxlbmd0aCArIGRlY2ltYWxQYXJ0LnNsaWNlKDAsIHRoaXMuc2NhbGUoKSkubGVuZ3RoO1xyXG5cclxuICAgICAgICBpZiAodG90YWxEaWdpdHMgPiB0aGlzLnByZWNpc2lvbigpKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIHRoaXMucGFzdGVSZWplY3RlZC5lbWl0KHBhc3RlZFRleHQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzdXBlci5vblBhc3RlKGV2ZW50KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE92ZXJyaWRlcyBsb2NhbGUtZGVyaXZlZCBzZXBhcmF0b3JzIHdpdGggZXhwbGljaXRseSBzZXQgaW5wdXRzLCBpZiBwcm92aWRlZC5cclxuICAgICAqIElmIG5vIGV4cGxpY2l0IHNlcGFyYXRvciBpcyBzZXQsIHRoZSBsb2NhbGUtZGVyaXZlZCB2YWx1ZSBpcyB1c2VkLlxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgdXBkYXRlU2VwYXJhdG9ycygpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBleHBsaWNpdERlY2ltYWwgPSB0aGlzLl9kZWNpbWFsU2VwYXJhdG9yRXhwbGljaXQgPyB0aGlzLmRlY2ltYWxTZXBhcmF0b3IoKSA6IHVuZGVmaW5lZDtcclxuICAgICAgICBjb25zdCBleHBsaWNpdFRob3VzYW5kID0gdGhpcy5fdGhvdXNhbmRTZXBhcmF0b3JFeHBsaWNpdFxyXG4gICAgICAgICAgICA/ICh0aGlzLnRob3VzYW5kc1NlcGFyYXRvcigpID8/IHRoaXMudGhvdXNhbmRTZXBhcmF0b3IoKSlcclxuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XHJcblxyXG4gICAgICAgIHN1cGVyLnVwZGF0ZVNlcGFyYXRvcnMoKTtcclxuXHJcbiAgICAgICAgaWYgKGV4cGxpY2l0RGVjaW1hbCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGVjaW1hbFNlcGFyYXRvci5zZXQoZXhwbGljaXREZWNpbWFsKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGV4cGxpY2l0VGhvdXNhbmQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aGlzLnRob3VzYW5kU2VwYXJhdG9yLnNldChleHBsaWNpdFRob3VzYW5kKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY2FsY3VsYXRlTWF4TGVuZ3RoKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVQbGFjZWhvbGRlcigpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogT3ZlcnJpZGVzIGJhc2UgdmFsaWRhdG9yIHRvIGFkZCBwcmVjaXNpb24gdmFsaWRhdGlvbi5cclxuICAgICAqIElmIHRoZSB0b3RhbCBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgZGlnaXRzIGV4Y2VlZHMgYHByZWNpc2lvbmAsIHJldHVybnMgYW4gYGV4Y2VlZHNQcmVjaXNpb25gIGVycm9yLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb3ZlcnJpZGUgdmFsaWRhdGUoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xyXG4gICAgICAgIGNvbnN0IGJhc2VFcnJvcnMgPSBzdXBlci52YWxpZGF0ZShjb250cm9sKTtcclxuXHJcbiAgICAgICAgaWYgKCFjb250cm9sLnZhbHVlIHx8ICF0aGlzLnByZWNpc2lvbigpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBiYXNlRXJyb3JzID8/IG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBudW1lcmljU3RyID0gU3RyaW5nKGNvbnRyb2wudmFsdWUpLnJlcGxhY2UoJy0nLCAnJyk7XHJcbiAgICAgICAgY29uc3QgW2ludFBhcnQsIGRlY2ltYWxQYXJ0ID0gJyddID0gbnVtZXJpY1N0ci5zcGxpdCgnLicpO1xyXG4gICAgICAgIGNvbnN0IHRvdGFsRGlnaXRzID0gaW50UGFydC5sZW5ndGggKyBkZWNpbWFsUGFydC5sZW5ndGg7XHJcblxyXG4gICAgICAgIGlmICh0b3RhbERpZ2l0cyA+IHRoaXMucHJlY2lzaW9uKCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIC4uLmJhc2VFcnJvcnMsXHJcbiAgICAgICAgICAgICAgICBleGNlZWRzUHJlY2lzaW9uOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJlY2lzaW9uOiB0aGlzLnByZWNpc2lvbigpLFxyXG4gICAgICAgICAgICAgICAgICAgIGFjdHVhbDogdG90YWxEaWdpdHMsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGJhc2VFcnJvcnMgPz8gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc3BvbnNpYmxlIHRvIGNhbGN1bGF0ZSB0aGUgZmllbGQgbWF4aW11bSBsZW5ndGggY29uc2lkZXJpbmcgdGhlIHNlcGFyYXRvcnMuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgY2FsY3VsYXRlTWF4TGVuZ3RoKCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGRlY1NlcExlbmd0aCA9IHRoaXMuZGVjaW1hbFNlcGFyYXRvcigpPy5sZW5ndGggPz8gMDtcclxuICAgICAgICBjb25zdCBlZmZlY3RpdmVUaG91c2FuZFNlcCA9IHRoaXMudGhvdXNhbmRzU2VwYXJhdG9yKCkgPz8gdGhpcy50aG91c2FuZFNlcGFyYXRvcigpO1xyXG4gICAgICAgIGNvbnN0IHRob1NlcExlbmd0aCA9IGVmZmVjdGl2ZVRob3VzYW5kU2VwPy5sZW5ndGggPz8gMDtcclxuXHJcbiAgICAgICAgY29uc3QgRElHSVRTX0dST1VQX1NJWkUgPSAzO1xyXG5cclxuICAgICAgICBsZXQgbWF4TGVuZ3RoID0gdGhpcy5wcmVjaXNpb24oKSArICh0aGlzLnNjYWxlKCkgPyBkZWNTZXBMZW5ndGggOiAwKTtcclxuICAgICAgICBtYXhMZW5ndGggKz1cclxuICAgICAgICAgICAgTWF0aC5jZWlsKCh0aGlzLnByZWNpc2lvbigpIC0gKHRoaXMuc2NhbGUoKSA/IHRoaXMuc2NhbGUoKSA6IDApKSAvIERJR0lUU19HUk9VUF9TSVpFIC0gMSkgKiB0aG9TZXBMZW5ndGg7XHJcblxyXG4gICAgICAgIHRoaXMubWF4TGVuZ3RoID0gbWF4TGVuZ3RoO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdXBkYXRlUGxhY2Vob2xkZXIoKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3Qgc2NhbGUgPSB0aGlzLnNjYWxlKCk7XHJcbiAgICAgICAgaWYgKCF0aGlzLnBsYWNlaG9sZGVyKCkgJiYgc2NhbGUpIHtcclxuICAgICAgICAgICAgdGhpcy5wbGFjZWhvbGRlci5zZXQoYDAke3RoaXMuZGVjaW1hbFNlcGFyYXRvcigpfSR7JycucGFkRW5kKHNjYWxlLCAnMCcpfWApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iXX0=
248
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmlnbnVtYmVyLWlucHV0LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY29tcG9uZW50cy9iaWdudW1iZXItaW5wdXQvc3JjL2xpYi9iaWdudW1iZXItaW5wdXQvYmlnbnVtYmVyLWlucHV0LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQzlHLE9BQU8sRUFBbUIsaUJBQWlCLEVBQW9CLE1BQU0sZ0JBQWdCLENBQUM7QUFFdEYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0saURBQWlELENBQUM7O0FBRXZGOztHQUVHO0FBQ0gsTUFBTSxDQUFOLElBQVksd0JBR1g7QUFIRCxXQUFZLHdCQUF3QjtJQUNoQywyQ0FBZSxDQUFBO0lBQ2YseUNBQWEsQ0FBQTtBQUNqQixDQUFDLEVBSFcsd0JBQXdCLEtBQXhCLHdCQUF3QixRQUduQztBQUVEOzs7Ozs7Ozs7Ozs7R0FZRztBQWlCSCxNQUFNLE9BQU8sdUJBQXdCLFNBQVEsb0JBQW9CO0lBQzdEOzs7Ozs7Ozs7T0FTRztJQUNJLFNBQVMsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7SUFFN0I7Ozs7OztPQU1HO0lBQ0ksS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUV4Qjs7OztPQUlHO0lBQ2EsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRTVDOzs7O09BSUc7SUFDYSxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFNUM7OztPQUdHO0lBQ2EsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRTlDOzs7T0FHRztJQUNJLGtCQUFrQixHQUFHLEtBQUssQ0FBcUIs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VyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUMxQyxDQUFDO1FBRUQsSUFBSSxDQUFDLG9CQUFvQixHQUFHLGVBQWUsQ0FBQztJQUNoRCxDQUFDO3dHQXBPUSx1QkFBdUI7NEZBQXZCLHVCQUF1QiwwMERBVnJCO1lBQ1A7Z0JBQ0ksT0FBTyxFQUFFLGlCQUFpQjtnQkFDMUIscURBQXFEO2dCQUNyRCxXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLHVCQUF1QixDQUFDO2dCQUN0RCxLQUFLLEVBQUUsSUFBSTthQUNkO1NBQ0o7OzRGQUdRLHVCQUF1QjtrQkFoQm5DLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLHdCQUF3QjtvQkFDbEMsSUFBSSxFQUFFO3dCQUNGLG9CQUFvQixFQUFFLGVBQWU7d0JBQ3JDLGtCQUFrQixFQUFFLFdBQVc7cUJBQ2xDO29CQUNELFNBQVMsRUFBRTt3QkFDUDs0QkFDSSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixxREFBcUQ7NEJBQ3JELFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLHdCQUF3QixDQUFDOzRCQUN0RCxLQUFLLEVBQUUsSUFBSTt5QkFDZDtxQkFDSjtvQkFDRCxVQUFVLEVBQUUsSUFBSTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIGZvcndhcmRSZWYsIGlucHV0LCBtb2RlbCwgT25DaGFuZ2VzLCBPbkluaXQsIG91dHB1dCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIE5HX1ZBTFVFX0FDQ0VTU09SLCBWYWxpZGF0aW9uRXJyb3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5cclxuaW1wb3J0IHsgTnVtZXJpY01hc2tEaXJlY3RpdmUgfSBmcm9tICdAc2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzL251bWVyaWMtbWFzayc7XHJcblxyXG4vKipcclxuICogQGRlcHJlY2F0ZWQgRXN0ZSBlbnVtIG7Do28gdGVtIG1haXMgZWZlaXRvLiBPIGFsaW5oYW1lbnRvIGRvIGNhbXBvIMOpIHNlbXByZSBgJ3JpZ2h0J2AuXHJcbiAqL1xyXG5leHBvcnQgZW51bSBCaWdudW1iZXJBbGlnbm1lbnRPcHRpb24ge1xyXG4gICAgUklHSFQgPSAncmlnaHQnLFxyXG4gICAgTEVGVCA9ICdsZWZ0JyxcclxufVxyXG5cclxuLyoqXHJcbiAqIEBkZXByZWNhdGVkIFV0aWxpemUgYSBkaXJldGl2YSBgQmlnTnVtYmVySW5wdXRgIGFvIGludsOpcyBkZXN0YS5cclxuICogQGRlc2NyaXB0aW9uIERpcmV0aXZhIGRlIG3DoXNjYXJhIHBhcmEgY2FtcG9zIGRlIGVudHJhZGEgZGUgbsO6bWVyb3MgZGUgZ3JhbmRlIHByZWNpc8OjbyxcclxuICogYWRhcHRhZGEgZG8gYEN1cnJlbmN5TWFza0RpcmVjdGl2ZWAuIFBlcm1pdGUgY29uZmlndXJhciBwcmVjaXPDo28sIGVzY2FsYSxcclxuICogc2VwYXJhZG9yZXMgZGVjaW1haXMgZSBkZSBtaWxoYXIgZGUgYWNvcmRvIGNvbSBvIGxvY2FsZSBkYSBhcGxpY2HDp8Ojby5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogYGBgaHRtbFxyXG4gKiA8aW5wdXQgc0JpZ251bWJlcklucHV0IFtwcmVjaXNpb25dPVwiMTVcIiBbc2NhbGVdPVwiMlwiIFthbGxvd05lZ2F0aXZlXT1cImZhbHNlXCIgLz5cclxuICogYGBgXHJcbiAqXHJcbiAqIEBjYXRlZ29yeSBJbnB1dHNcclxuICovXHJcbkBEaXJlY3RpdmUoe1xyXG4gICAgc2VsZWN0b3I6ICdpbnB1dFtzQmlnbnVtYmVySW5wdXRdJyxcclxuICAgIGhvc3Q6IHtcclxuICAgICAgICAnW2F0dHIucGxhY2Vob2xkZXJdJzogJ3BsYWNlaG9sZGVyKCknLFxyXG4gICAgICAgICdbYXR0ci5tYXhMZW5ndGhdJzogJ21heExlbmd0aCcsXHJcbiAgICB9LFxyXG4gICAgcHJvdmlkZXJzOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgICAgICAgICAgLy8gTk9TT05BUiAtICdCaWdudW1iZXJJbnB1dERpcmVjdGl2ZScgaXMgZGVwcmVjYXRlZC5cclxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQmlnbnVtYmVySW5wdXREaXJlY3RpdmUpLFxyXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZSxcclxuICAgICAgICB9LFxyXG4gICAgXSxcclxuICAgIHN0YW5kYWxvbmU6IHRydWUsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBCaWdudW1iZXJJbnB1dERpcmVjdGl2ZSBleHRlbmRzIE51bWVyaWNNYXNrRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gTsO6bWVybyB0b3RhbCBkZSBkw61naXRvcyBzaWduaWZpY2F0aXZvcyBhY2VpdG9zIHBlbG8gY2FtcG8gKHBhcnRlIGludGVpcmEgKyBwYXJ0ZSBkZWNpbWFsKS5cclxuICAgICAqXHJcbiAgICAgKiBEdXJhbnRlIGEgZGlnaXRhw6fDo28sIG8gY2FtcG8gbGltaXRhIGZpc2ljYW1lbnRlIG8gbsO6bWVybyBkZSBjYXJhY3RlcmVzIHZpYSBgbWF4TGVuZ3RoYC5cclxuICAgICAqIEFvIGNvbGFyIHVtIHZhbG9yIHF1ZSB1bHRyYXBhc3NlIG8gbGltaXRlLCBvIGV2ZW50byBgcGFzdGVSZWplY3RlZGAgw6kgZW1pdGlkbyBlIGEgY29sYWdlbSDDqSBjYW5jZWxhZGEuXHJcbiAgICAgKiBBcMOzcyBzYWlyIGRvIGNhbXBvIChibHVyKSBvdSBhbyBzdWJtZXRlciBvIGZvcm11bMOhcmlvLCBzZSBvIHZhbG9yIHVsdHJhcGFzc2FyIGBwcmVjaXNpb25gLFxyXG4gICAgICogbyBjYW1wbyBmaWNhcsOhIGludsOhbGlkbyBjb20gbyBlcnJvIGBleGNlZWRzUHJlY2lzaW9uOiB7IHByZWNpc2lvbiwgYWN0dWFsIH1gLlxyXG4gICAgICpcclxuICAgICAqIEBkZWZhdWx0IDE1XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBwcmVjaXNpb24gPSBpbnB1dCgxNSk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVwcmVjYXRlZCBVc2UgYG1pbkRlY2ltYWxQbGFjZXNgIGUgYG1heERlY2ltYWxQbGFjZXNgIGFvIGludsOpcyBkZXN0ZS5cclxuICAgICAqIEBkZXNjcmlwdGlvbiBOw7ptZXJvIGRlIGNhc2FzIGRlY2ltYWlzIGV4aWJpZGFzIGUgYWNlaXRhcyBwZWxvIGNhbXBvLlxyXG4gICAgICogUXVhbmRvIGluZm9ybWFkbywgcmVwYXNzYSBvIHZhbG9yIHBhcmEgYG1pbkRlY2ltYWxQbGFjZXNgIGUgYG1heERlY2ltYWxQbGFjZXNgLlxyXG4gICAgICpcclxuICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAqL1xyXG4gICAgcHVibGljIHNjYWxlID0gaW5wdXQoMCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gTsO6bWVybyBtw61uaW1vIGRlIGNhc2FzIGRlY2ltYWlzIGV4aWJpZGFzLlxyXG4gICAgICpcclxuICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAqL1xyXG4gICAgcHVibGljIG92ZXJyaWRlIG1pbkRlY2ltYWxQbGFjZXMgPSBtb2RlbCgwKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBOw7ptZXJvIG3DoXhpbW8gZGUgY2FzYXMgZGVjaW1haXMgYWNlaXRhcy5cclxuICAgICAqXHJcbiAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvdmVycmlkZSBtYXhEZWNpbWFsUGxhY2VzID0gbW9kZWwoMCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gU2VwYXJhZG9yIGRlY2ltYWwgcGVyc29uYWxpemFkby4gUXVhbmRvIG7Do28gaW5mb3JtYWRvLFxyXG4gICAgICogdXRpbGl6YSBvIHNlcGFyYWRvciBkZWZpbmlkbyBwZWxvIGxvY2FsZSBhdGl2byBkYSBhcGxpY2HDp8Ojby5cclxuICAgICAqL1xyXG4gICAgcHVibGljIG92ZXJyaWRlIGRlY2ltYWxTZXBhcmF0b3IgPSBtb2RlbCgnLCcpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlcHJlY2F0ZWQgVXNlIGB0aG91c2FuZFNlcGFyYXRvcmAgYW8gaW52w6lzIGRlc3RlLlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFNlcGFyYWRvciBkZSBtaWxoYXIgcGVyc29uYWxpemFkby4gUmVjb21lbmRhLXNlIG1pZ3JhciBwYXJhIGB0aG91c2FuZFNlcGFyYXRvcmAuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB0aG91c2FuZHNTZXBhcmF0b3IgPSBpbnB1dDxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gU2VwYXJhZG9yIGRlIG1pbGhhciBwZXJzb25hbGl6YWRvLiBRdWFuZG8gbsOjbyBpbmZvcm1hZG8sXHJcbiAgICAgKiB1dGlsaXphIG8gc2VwYXJhZG9yIGRlZmluaWRvIHBlbG8gbG9jYWxlIGF0aXZvIGRhIGFwbGljYcOnw6NvLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb3ZlcnJpZGUgdGhvdXNhbmRTZXBhcmF0b3IgPSBtb2RlbCgnLicpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlcHJlY2F0ZWQgRXN0ZSBpbnB1dCBuw6NvIHRlbSBtYWlzIGVmZWl0byBlIHBvZGUgc2VyIHJlbW92aWRvLlxyXG4gICAgICogTyBhbGluaGFtZW50byBkbyBjYW1wbyDDqSBzZW1wcmUgYCdyaWdodCdgLCBjb25mb3JtZSBvIGNvbXBvcnRhbWVudG8gcGFkcsOjbyBkYSBtw6FzY2FyYSBudW3DqXJpY2EuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhbGlnblRvID0gaW5wdXQ8J2xlZnQnIHwgJ3JpZ2h0Jz4oJ3JpZ2h0Jyk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gUGVybWl0ZSBhIGVudHJhZGEgZGUgdmFsb3JlcyBuZWdhdGl2b3MuXHJcbiAgICAgKlxyXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb3ZlcnJpZGUgYWxsb3dOZWdhdGl2ZSA9IGlucHV0KHRydWUpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFRleHRvIGRlIHBsYWNlaG9sZGVyIGV4aWJpZG8gcXVhbmRvIG8gY2FtcG8gZXN0w6EgdmF6aW8uXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBwbGFjZWhvbGRlciA9IG1vZGVsPHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcclxuXHJcbiAgICBwdWJsaWMgbWF4TGVuZ3RoPzogbnVtYmVyO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEVtaXRpZG8gcXVhbmRvIHVtYSBjb2xhZ2VtIChwYXN0ZSkgw6kgcmVqZWl0YWRhIHBlbGEgdmFsaWRhw6fDo28gZG8gY2FtcG8uXHJcbiAgICAgKiBFbWl0ZSBhIHN0cmluZyBjb2xhZGEgcXVlIGZvaSByZWN1c2FkYS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHBhc3RlUmVqZWN0ZWQgPSBvdXRwdXQ8c3RyaW5nPigpO1xyXG5cclxuICAgIHByaXZhdGUgX2RlY2ltYWxTZXBhcmF0b3JFeHBsaWNpdCA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBfdGhvdXNhbmRTZXBhcmF0b3JFeHBsaWNpdCA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBfbGFzdEF1dG9QbGFjZWhvbGRlcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG92ZXJyaWRlIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVQbGFjZWhvbGRlcigpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIG5nT25DaGFuZ2VzIGhhbmRsZXMgYWxsIHNpZ25hbCB3cml0ZXMgcmVhY3RpdmVseSwgYXZvaWRpbmcgdGhlIG5lZWQgZm9yXHJcbiAgICAvLyBlZmZlY3QoKSB3aXRoIGFsbG93U2lnbmFsV3JpdGVzLiBUaGUgZGVjaW1hbFNlcGFyYXRvci90aG91c2FuZFNlcGFyYXRvciBpbnB1dHNcclxuICAgIC8vIGhhdmUgdHJ1dGh5IGRlZmF1bHRzLCBzbyBuZ09uQ2hhbmdlcyBpcyBuZWNlc3NhcnkgdG8gZGlzdGluZ3Vpc2ggXCJwYXJlbnQgYm91bmQgdGhpc1wiXHJcbiAgICAvLyBmcm9tIFwiaXQncyBqdXN0IHRoZSBkZWZhdWx0IHZhbHVlXCIuXHJcbiAgICBwdWJsaWMgb3ZlcnJpZGUgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgICAgIGlmIChjaGFuZ2VzWydkZWNpbWFsU2VwYXJhdG9yJ10gJiYgdGhpcy5kZWNpbWFsU2VwYXJhdG9yKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5fZGVjaW1hbFNlcGFyYXRvckV4cGxpY2l0ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNoYW5nZXNbJ3Rob3VzYW5kU2VwYXJhdG9yJ10gJiYgdGhpcy50aG91c2FuZFNlcGFyYXRvcigpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3Rob3VzYW5kU2VwYXJhdG9yRXhwbGljaXQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY2hhbmdlc1sndGhvdXNhbmRzU2VwYXJhdG9yJ10pIHtcclxuICAgICAgICAgICAgY29uc3QgdmFsID0gdGhpcy50aG91c2FuZHNTZXBhcmF0b3IoKTtcclxuICAgICAgICAgICAgaWYgKHZhbCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl90aG91c2FuZFNlcGFyYXRvckV4cGxpY2l0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMudGhvdXNhbmRTZXBhcmF0b3Iuc2V0KHZhbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNoYW5nZXNbJ3NjYWxlJ10pIHtcclxuICAgICAgICAgICAgdGhpcy5taW5EZWNpbWFsUGxhY2VzLnNldCh0aGlzLnNjYWxlKCkpO1xyXG4gICAgICAgICAgICB0aGlzLm1heERlY2ltYWxQbGFjZXMuc2V0KHRoaXMuc2NhbGUoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgY2hhbmdlc1snc2NhbGUnXSB8fFxyXG4gICAgICAgICAgICBjaGFuZ2VzWydkZWNpbWFsU2VwYXJhdG9yJ10gfHxcclxuICAgICAgICAgICAgY2hhbmdlc1sndGhvdXNhbmRTZXBhcmF0b3InXSB8fFxyXG4gICAgICAgICAgICBjaGFuZ2VzWyd0aG91c2FuZHNTZXBhcmF0b3InXSB8fFxyXG4gICAgICAgICAgICBjaGFuZ2VzWydwcmVjaXNpb24nXVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICB0aGlzLmNhbGN1bGF0ZU1heExlbmd0aCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY2hhbmdlc1snc2NhbGUnXSB8fCBjaGFuZ2VzWydkZWNpbWFsU2VwYXJhdG9yJ10pIHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVQbGFjZWhvbGRlcigpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE92ZXJyaWRlcyBiYXNlIHBhc3RlIGhhbmRsZXIgdG8gYWRkIHByZWNpc2lvbiB2YWxpZGF0aW9uLlxyXG4gICAgICogSWYgdGhlIHBhc3RlZCB2YWx1ZSBleGNlZWRzIGBwcmVjaXNpb25gIGRpZ2l0cywgdGhlIHBhc3RlIGlzIHJlamVjdGVkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb3ZlcnJpZGUgb25QYXN0ZShldmVudDogQ2xpcGJvYXJkRXZlbnQpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBwYXN0ZWRUZXh0ID0gZXZlbnQuY2xpcGJvYXJkRGF0YT8uZ2V0RGF0YSgndGV4dCcpID8/ICcnO1xyXG4gICAgICAgIGNvbnN0IGVmZmVjdGl2ZVRob3VzYW5kU2VwID0gdGhpcy50aG91c2FuZHNTZXBhcmF0b3IoKSA/PyB0aGlzLnRob3VzYW5kU2VwYXJhdG9yKCk7XHJcbiAgICAgICAgY29uc3QgbnVtZXJpY1RleHQgPSBwYXN0ZWRUZXh0XHJcbiAgICAgICAgICAgIC5yZXBsYWNlKG5ldyBSZWdFeHAoYFxcXFwke2VmZmVjdGl2ZVRob3VzYW5kU2VwfWAsICdnJyksICcnKVxyXG4gICAgICAgICAgICAucmVwbGFjZSh0aGlzLmRlY2ltYWxTZXBhcmF0b3IoKSwgJy4nKTtcclxuICAgICAgICBjb25zdCBbaW50UGFydCwgZGVjaW1hbFBhcnQgPSAnJ10gPSBudW1lcmljVGV4dC5zcGxpdCgnLicpO1xyXG4gICAgICAgIGNvbnN0IHRvdGFsRGlnaXRzID0gaW50UGFydC5yZXBsYWNlKC9cXEQvZywgJycpLmxlbmd0aCArIGRlY2ltYWxQYXJ0LnNsaWNlKDAsIHRoaXMuc2NhbGUoKSkubGVuZ3RoO1xyXG5cclxuICAgICAgICBpZiAodG90YWxEaWdpdHMgPiB0aGlzLnByZWNpc2lvbigpKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIHRoaXMucGFzdGVSZWplY3RlZC5lbWl0KHBhc3RlZFRleHQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzdXBlci5vblBhc3RlKGV2ZW50KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE92ZXJyaWRlcyBsb2NhbGUtZGVyaXZlZCBzZXBhcmF0b3JzIHdpdGggZXhwbGljaXRseSBzZXQgaW5wdXRzLCBpZiBwcm92aWRlZC5cclxuICAgICAqIElmIG5vIGV4cGxpY2l0IHNlcGFyYXRvciBpcyBzZXQsIHRoZSBsb2NhbGUtZGVyaXZlZCB2YWx1ZSBpcyB1c2VkLlxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgdXBkYXRlU2VwYXJhdG9ycygpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBleHBsaWNpdERlY2ltYWwgPSB0aGlzLl9kZWNpbWFsU2VwYXJhdG9yRXhwbGljaXQgPyB0aGlzLmRlY2ltYWxTZXBhcmF0b3IoKSA6IHVuZGVmaW5lZDtcclxuICAgICAgICBjb25zdCBleHBsaWNpdFRob3VzYW5kID0gdGhpcy5fdGhvdXNhbmRTZXBhcmF0b3JFeHBsaWNpdFxyXG4gICAgICAgICAgICA/ICh0aGlzLnRob3VzYW5kc1NlcGFyYXRvcigpID8/IHRoaXMudGhvdXNhbmRTZXBhcmF0b3IoKSlcclxuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XHJcblxyXG4gICAgICAgIHN1cGVyLnVwZGF0ZVNlcGFyYXRvcnMoKTtcclxuXHJcbiAgICAgICAgaWYgKGV4cGxpY2l0RGVjaW1hbCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGVjaW1hbFNlcGFyYXRvci5zZXQoZXhwbGljaXREZWNpbWFsKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGV4cGxpY2l0VGhvdXNhbmQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aGlzLnRob3VzYW5kU2VwYXJhdG9yLnNldChleHBsaWNpdFRob3VzYW5kKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY2FsY3VsYXRlTWF4TGVuZ3RoKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVQbGFjZWhvbGRlcigpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogT3ZlcnJpZGVzIGJhc2UgdmFsaWRhdG9yIHRvIGFkZCBwcmVjaXNpb24gdmFsaWRhdGlvbi5cclxuICAgICAqIElmIHRoZSB0b3RhbCBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgZGlnaXRzIGV4Y2VlZHMgYHByZWNpc2lvbmAsIHJldHVybnMgYW4gYGV4Y2VlZHNQcmVjaXNpb25gIGVycm9yLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb3ZlcnJpZGUgdmFsaWRhdGUoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xyXG4gICAgICAgIGNvbnN0IGJhc2VFcnJvcnMgPSBzdXBlci52YWxpZGF0ZShjb250cm9sKTtcclxuXHJcbiAgICAgICAgaWYgKCFjb250cm9sLnZhbHVlIHx8ICF0aGlzLnByZWNpc2lvbigpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBiYXNlRXJyb3JzID8/IG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBudW1lcmljU3RyID0gU3RyaW5nKGNvbnRyb2wudmFsdWUpLnJlcGxhY2UoJy0nLCAnJyk7XHJcbiAgICAgICAgY29uc3QgW2ludFBhcnQsIGRlY2ltYWxQYXJ0ID0gJyddID0gbnVtZXJpY1N0ci5zcGxpdCgnLicpO1xyXG4gICAgICAgIGNvbnN0IHRvdGFsRGlnaXRzID0gaW50UGFydC5sZW5ndGggKyBkZWNpbWFsUGFydC5sZW5ndGg7XHJcblxyXG4gICAgICAgIGlmICh0b3RhbERpZ2l0cyA+IHRoaXMucHJlY2lzaW9uKCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIC4uLmJhc2VFcnJvcnMsXHJcbiAgICAgICAgICAgICAgICBleGNlZWRzUHJlY2lzaW9uOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJlY2lzaW9uOiB0aGlzLnByZWNpc2lvbigpLFxyXG4gICAgICAgICAgICAgICAgICAgIGFjdHVhbDogdG90YWxEaWdpdHMsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGJhc2VFcnJvcnMgPz8gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc3BvbnNpYmxlIHRvIGNhbGN1bGF0ZSB0aGUgZmllbGQgbWF4aW11bSBsZW5ndGggY29uc2lkZXJpbmcgdGhlIHNlcGFyYXRvcnMuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgY2FsY3VsYXRlTWF4TGVuZ3RoKCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGRlY1NlcExlbmd0aCA9IHRoaXMuZGVjaW1hbFNlcGFyYXRvcigpPy5sZW5ndGggPz8gMDtcclxuICAgICAgICBjb25zdCBlZmZlY3RpdmVUaG91c2FuZFNlcCA9IHRoaXMudGhvdXNhbmRzU2VwYXJhdG9yKCkgPz8gdGhpcy50aG91c2FuZFNlcGFyYXRvcigpO1xyXG4gICAgICAgIGNvbnN0IHRob1NlcExlbmd0aCA9IGVmZmVjdGl2ZVRob3VzYW5kU2VwPy5sZW5ndGggPz8gMDtcclxuXHJcbiAgICAgICAgY29uc3QgRElHSVRTX0dST1VQX1NJWkUgPSAzO1xyXG5cclxuICAgICAgICBsZXQgbWF4TGVuZ3RoID0gdGhpcy5wcmVjaXNpb24oKSArICh0aGlzLnNjYWxlKCkgPyBkZWNTZXBMZW5ndGggOiAwKTtcclxuICAgICAgICBtYXhMZW5ndGggKz1cclxuICAgICAgICAgICAgTWF0aC5jZWlsKCh0aGlzLnByZWNpc2lvbigpIC0gKHRoaXMuc2NhbGUoKSA/IHRoaXMuc2NhbGUoKSA6IDApKSAvIERJR0lUU19HUk9VUF9TSVpFIC0gMSkgKiB0aG9TZXBMZW5ndGg7XHJcblxyXG4gICAgICAgIHRoaXMubWF4TGVuZ3RoID0gbWF4TGVuZ3RoO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdXBkYXRlUGxhY2Vob2xkZXIoKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3Qgc2NhbGUgPSB0aGlzLnNjYWxlKCk7XHJcbiAgICAgICAgY29uc3QgYXV0b1BsYWNlaG9sZGVyID0gc2NhbGUgPyBgMCR7dGhpcy5kZWNpbWFsU2VwYXJhdG9yKCl9JHsnJy5wYWRFbmQoc2NhbGUsICcwJyl9YCA6ICcwJztcclxuXHJcbiAgICAgICAgaWYgKHRoaXMucGxhY2Vob2xkZXIoKSA9PT0gdW5kZWZpbmVkIHx8IHRoaXMucGxhY2Vob2xkZXIoKSA9PT0gdGhpcy5fbGFzdEF1dG9QbGFjZWhvbGRlcikge1xyXG4gICAgICAgICAgICB0aGlzLnBsYWNlaG9sZGVyLnNldChhdXRvUGxhY2Vob2xkZXIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fbGFzdEF1dG9QbGFjZWhvbGRlciA9IGF1dG9QbGFjZWhvbGRlcjtcclxuICAgIH1cclxufVxyXG4iXX0=
@@ -44,6 +44,12 @@ export class CoreFacade {
44
44
  notifyCoreFinishLoad() {
45
45
  this.$onCoreFinishLoad.next();
46
46
  }
47
+ resetCoreFinishLoad() {
48
+ this.$onCoreFinishLoad = new ReplaySubject(1);
49
+ }
50
+ resetLastCodeEmitted() {
51
+ this._lastCodeEmitted = '';
52
+ }
47
53
  notifyCodeChange(code) {
48
54
  const safeCode = this.getSafeCode(code);
49
55
  if (safeCode !== this._lastCodeEmitted) {
@@ -88,4 +94,4 @@ export class CoreFacade {
88
94
  return typeof code === 'string' ? code : '';
89
95
  }
90
96
  }
91
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS1mYWNhZGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvY29kZS1lZGl0b3Ivc3JjL2xpYi9jb2RlLWVkaXRvci9jb3JlL2ZhY2FkZXMvY29yZS1mYWNhZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLGFBQWEsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFMUQsT0FBTyxFQUFpQixTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRWhFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUd4RCxNQUFNLE9BQWdCLFVBQVU7SUFDWCxpQkFBaUIsR0FBd0IsSUFBSSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUQsYUFBYSxHQUFvQixJQUFJLE9BQU8sRUFBRSxDQUFDO0lBQy9DLHFCQUFxQixHQUFxQixJQUFJLE9BQU8sRUFBRSxDQUFDO0lBQ2pFLGdCQUFnQixHQUFhLEVBQUUsQ0FBQztJQUNoQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7SUFDdEIsd0JBQXdCLENBQVc7SUFDbkMsT0FBTyxDQUFnQjtJQUV4QixtQkFBbUIsQ0FBQyxPQUFzQjtRQUM3QyxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ1YsSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDOUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxrREFBa0QsQ0FBQyxDQUFDO1lBQ3hFLENBQUM7WUFFRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFFBQXFCLENBQUMsQ0FBQztZQUNyRCxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxLQUFlLENBQUMsQ0FBQztZQUM1QyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxRQUFxQixDQUFDLENBQUM7WUFFOUMsSUFBSSxDQUFDLG9C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QywwQkFBMEIsUUFBUSxvQkFBb0IsQ0FBQyxDQUFDO1FBQzVFLENBQUM7SUFDTCxDQUFDO0lBRU8sYUFBYSxDQUFDLEtBQWE7UUFDL0IsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNyQyxJQUFJLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNuQyxNQUFNLElBQUksS0FBSyxDQUFDLHVCQUF1QixLQUFLLG9CQUFvQixDQUFDLENBQUM7UUFDdEUsQ0FBQztJQUNMLENBQUM7SUFFTyxXQUFXLENBQUMsSUFBWTtRQUM1QixPQUFPLE9BQU8sSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDaEQsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JzZXJ2YWJsZSwgUmVwbGF5U3ViamVjdCwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBFZGl0b3JPcHRpb25zLCBMYW5ndWFnZXMsIFRoZW1lcyB9IGZyb20gJy4uLy4uL21vZGVscyc7XG5pbXBvcnQgeyBNYXJrZXIgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgQ29yZUxpbnRlcnMgfSBmcm9tICcuLi91c2UtY2FzZXMvY29yZS1saW50ZXJzJztcbmltcG9ydCB7IExpbnRlckZhY2FkZSB9IGZyb20gJy4vbGludGVyLWZhY2FkZSc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBDb3JlRmFjYWRlIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5ICRvbkNvcmVGaW5pc2hMb2FkOiBSZXBsYXlTdWJqZWN0PHZvaWQ+ID0gbmV3IFJlcGxheVN1YmplY3QoMSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSAkb25Db2RlQ2hhbmdlOiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdCgpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgJG9uQ29kZVZhbGlkaXR5Q2hhbmdlOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3QoKTtcbiAgICBwcml2YXRlIF9jb21wbGV0aW9uSXRlbXM6IHN0cmluZ1tdID0gW107XG4gICAgcHJpdmF0ZSBfbGFzdENvZGVFbWl0dGVkID0gJyc7XG4gICAgcHJpdmF0ZSBfbGFzdENvZGVWYWxpZGl0eUVtaXR0ZWQhOiBib29sZWFuO1xuICAgIHByaXZhdGUgX2xpbnRlciE6IExpbnRlckZhY2FkZTtcblxuICAgIHB1YmxpYyBjaGFuZ2VFZGl0b3JPcHRpb25zKG9wdGlvbnM6IEVkaXRvck9wdGlvbnMpOiB2b2lkIHtcbiAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFZGl0b3IncyBvcHRpb25zIG11c3QgYmUgYW4gRWRpdG9yT3B0aW9ucyBvYmplY3RcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVMYW5ndWFnZShvcHRpb25zLmxhbmd1YWdlIGFzIExhbmd1YWdlcyk7XG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRlVGhlbWUob3B0aW9ucy50aGVtZSBhcyBUaGVtZXMpO1xuICAgICAgICAgICAgdGhpcy5zZXRMaW50ZXIob3B0aW9ucy5sYW5ndWFnZSBhcyBMYW5ndWFnZXMpO1xuXG4gICAgICAgICAgICB0aGlzLnNldENvcmVFZGl0b3JPcHRpb25zKG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGNoYW5nZUNvZGUoY29kZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHNhZmVDb2RlID0gdGhpcy5nZXRTYWZlQ29kZShjb2RlKTtcbiAgICAgICAgaWYgKHNhZmVDb2RlICE9PSB0aGlzLl9sYXN0Q29kZUVtaXR0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0Q29kZShzYWZlQ29kZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0UGF5bG9hZChwYXlsb2FkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc2FmZUNvZGUgPSB0aGlzLmdldFNhZmVDb2RlKHBheWxvYWQpO1xuICAgICAgICAvLyBGb3LDp2EgYSBhdHVhbGl6YcOnw6NvIHNlbSB2ZXJpZmljYXIgX2xhc3RDb2RlRW1pdHRlZCxcbiAgICAgICAgLy8gbWFzIHByZXNlcnZhIG8gY3Vyc29yIHZlcmlmaWNhbmRvIG5vIG7DrXZlbCBkbyBlZGl0b3JcbiAgICAgICAgdGhpcy5zZXRDb2RlV2l0aEN1cnNvclByZXNlcnZhdGlvbihzYWZlQ29kZSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IHNldENvZGVXaXRoQ3Vyc29yUHJlc2VydmF0aW9uKGNvZGU6IHN0cmluZyk6IHZvaWQ7XG5cbiAgICBwdWJsaWMgYWJzdHJhY3QgaW5pdENvcmUoKTogdm9pZDtcbiAgICBwdWJsaWMgYWJzdHJhY3QgZGVzdHJveUNvcmUoKTogdm9pZDtcblxuICAgIHB1YmxpYyBhYnN0cmFjdCBzZXRDb3JlV3JhcHBlckVsZW1lbnQoZWxlbWVudDogSFRNTERpdkVsZW1lbnQpOiB2b2lkO1xuICAgIHB1YmxpYyBhYnN0cmFjdCBzZXRDb2RlKGNvZGU6IHN0cmluZyk6IHZvaWQ7XG5cbiAgICBwdWJsaWMgZ2V0T25Db3JlRmluaXNoTG9hZE9ic2VydmFibGUoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLiRvbkNvcmVGaW5pc2hMb2FkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRPbkNvZGVDaGFuZ2VPYnNlcnZhYmxlKCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgICAgIHJldHVybiB0aGlzLiRvbkNvZGVDaGFuZ2UuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldE9uQ29kZVZhbGlkaXR5Q2hhbmdlT2JzZXJ2YWJsZSgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJG9uQ29kZVZhbGlkaXR5Q2hhbmdlLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBhYnN0cmFjdCBzZXRDb3JlRWRpdG9yT3B0aW9ucyhvcHRpb25zOiBFZGl0b3JPcHRpb25zKTogdm9pZDtcbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgaGlnaGxpZ2h0Q29kZShtYXJrZXJzOiBNYXJrZXJbXSk6IHZvaWQ7XG5cbiAgICBwcm90ZWN0ZWQgbm90aWZ5Q29yZUZpbmlzaExvYWQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuJG9uQ29yZUZpbmlzaExvYWQubmV4dCgpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBub3RpZnlDb2RlQ2hhbmdlKGNvZGU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBzYWZlQ29kZSA9IHRoaXMuZ2V0U2FmZUNvZGUoY29kZSk7XG4gICAgICAgIGlmIChzYWZlQ29kZSAhPT0gdGhpcy5fbGFzdENvZGVFbWl0dGVkKSB7XG4gICAgICAgICAgICB0aGlzLl9sYXN0Q29kZUVtaXR0ZWQgPSBzYWZlQ29kZTtcbiAgICAgICAgICAgIHRoaXMuJG9uQ29kZUNoYW5nZS5uZXh0KHNhZmVDb2RlKTtcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVDb2RlKHNhZmVDb2RlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCB1cGRhdGVDb21wbGV0aW9uSXRlbXMoaXRlbXM6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NvbXBsZXRpb25JdGVtcyA9IGl0ZW1zIHx8IFtdO1xuICAgICAgICB0aGlzLnZhbGlkYXRlQ29kZSh0aGlzLl9sYXN0Q29kZUVtaXR0ZWQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0TGludGVyKGxhbmd1YWdlOiBMYW5ndWFnZXMpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fbGludGVyID0gQ29yZUxpbnRlcnMuZ2V0TGludGVyKGxhbmd1YWdlKSBhcyBMaW50ZXJGYWNhZGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyB2YWxpZGF0ZUNvZGUoY29kZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICh0aGlzLl9saW50ZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IG1hcmtlcnM6IE1hcmtlcltdID0gYXdhaXQgdGhpcy5fbGludGVyLmxpbnQoY29kZSwgdGhpcy5fY29tcGxldGlvbkl0ZW1zKTtcbiAgICAgICAgICAgIHRoaXMuaGlnaGxpZ2h0Q29kZShtYXJrZXJzKTtcbiAgICAgICAgICAgIHRoaXMubm90aWZ5Q29kZVZhbGlkaXR5Q2hhbmdlKCFtYXJrZXJzLmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG5vdGlmeUNvZGVWYWxpZGl0eUNoYW5nZSh2YWxpZGl0eTogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAodmFsaWRpdHkgIT09IHRoaXMuX2xhc3RDb2RlVmFsaWRpdHlFbWl0dGVkKSB7XG4gICAgICAgICAgICB0aGlzLl9sYXN0Q29kZVZhbGlkaXR5RW1pdHRlZCA9IHZhbGlkaXR5O1xuICAgICAgICAgICAgdGhpcy4kb25Db2RlVmFsaWRpdHlDaGFuZ2UubmV4dCh2YWxpZGl0eSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHZhbGlkYXRlTGFuZ3VhZ2UobGFuZ3VhZ2U6IExhbmd1YWdlcyk6IHZvaWQge1xuICAgICAgICBjb25zdCBsYW5ndWFnZXMgPSBPYmplY3QudmFsdWVzKExhbmd1YWdlcyk7XG4gICAgICAgIGlmIChsYW5ndWFnZSAmJiAhbGFuZ3VhZ2VzLmluY2x1ZGVzKGxhbmd1YWdlKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgaW5mb3JtZWQgbGFuZ3VhZ2UgXCIke2xhbmd1YWdlfVwiIGlzIG5vdCBzdXBwb3J0ZWRgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdmFsaWRhdGVUaGVtZSh0aGVtZTogVGhlbWVzKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRoZW1lcyA9IE9iamVjdC52YWx1ZXMoVGhlbWVzKTtcbiAgICAgICAgaWYgKHRoZW1lICYmICF0aGVtZXMuaW5jbHVkZXModGhlbWUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBpbmZvcm1lZCB0aGVtZSBcIiR7dGhlbWV9XCIgaXMgbm90IHN1cHBvcnRlZGApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRTYWZlQ29kZShjb2RlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdHlwZW9mIGNvZGUgPT09ICdzdHJpbmcnID8gY29kZSA6ICcnO1xuICAgIH1cbn1cbiJdfQ==
97
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS1mYWNhZGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvY29kZS1lZGl0b3Ivc3JjL2xpYi9jb2RlLWVkaXRvci9jb3JlL2ZhY2FkZXMvY29yZS1mYWNhZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLGFBQWEsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFMUQsT0FBTyxFQUFpQixTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRWhFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUd4RCxNQUFNLE9BQWdCLFVBQVU7SUFDcEIsaUJBQWlCLEdBQXdCLElBQUksYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JELGFBQWEsR0FBb0IsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUMvQyxxQkFBcUIsR0FBcUIsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUNqRSxnQkFBZ0IsR0FBYSxFQUFFLENBQUM7SUFDaEMsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO0lBQ3RCLHdCQUF3QixDQUFXO0lBQ25DLE9BQU8sQ0FBZ0I7SUFFeEIsbUJBQW1CLENBQUMsT0FBc0I7UUFDN0MsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNWLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQzlCLE1BQU0sSUFBSSxLQUFLLENBQUMsa0RBQWtELENBQUMsQ0FBQztZQUN4RSxDQUFDO1lBRUQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxRQUFxQixDQUFDLENBQUM7WUFDckQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsS0FBZSxDQUFDLENBQUM7WUFDNUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsUUFBcUIsQ0FBQyxDQUFDO1lBRTlDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN2QyxDQUFDO0lBQ0wsQ0FBQztJQUVNLFVBQVUsQ0FBQyxJQUFZO1FBQzFCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEMsSUFBSSxRQUFRLEtBQUssSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDckMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMzQixDQUFDO0lBQ0wsQ0FBQztJQUVNLFVBQVUsQ0FBQyxPQUFlO1FBQzdCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDM0Msc0RBQXNEO1FBQ3RELHVEQUF1RDtRQUN2RCxJQUFJLENBQUMsNkJBQTZCLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDakQsQ0FBQztJQVVNLDZCQUE2QjtRQUNoQyxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUNqRCxDQUFDO0lBRU0seUJBQXlCO1FBQzVCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUM3QyxDQUFDO0lBRU0saUNBQWlDO1FBQ3BDLE9BQU8sSUFBSSxDQUFDLHFCQUFxQixDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3JELENBQUM7SUFLUyxvQkFBb0I7UUFDMUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFUyxtQkFBbUI7UUFDekIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFUyxvQkFBb0I7UUFDMUIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRVMsZ0JBQWdCLENBQUMsSUFBWTtRQUNuQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hDLElBQUksUUFBUSxLQUFLLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3JDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxRQUFRLENBQUM7WUFDakMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDbEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNoQyxDQUFDO0lBQ0wsQ0FBQztJQUVTLHFCQUFxQixDQUFDLEtBQWU7UUFDM0MsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDcEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRU8sU0FBUyxDQUFDLFFBQW1CO1FBQ2pDLElBQUksQ0FBQyxPQUFPLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQWlCLENBQUM7SUFDbkUsQ0FBQztJQUVPLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBWTtRQUNuQyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNmLE1BQU0sT0FBTyxHQUFhLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQy9FLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDNUIsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ25ELENBQUM7SUFDTCxDQUFDO0lBRU8sd0JBQXdCLENBQUMsUUFBaUI7UUFDOUMsSUFBSSxRQUFRLEtBQUssSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7WUFDN0MsSUFBSSxDQUFDLHdCQUF3QixHQUFHLFFBQVEsQ0FBQztZQUN6QyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzlDLENBQUM7SUFDTCxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsUUFBbUI7UUFDeEMsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMzQyxJQUFJLFFBQVEsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUM1QyxNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixRQUFRLG9CQUFvQixDQUFDLENBQUM7UUFDNUUsQ0FBQztJQUNMLENBQUM7SUFFTyxhQUFhLENBQUMsS0FBYTtRQUMvQixNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3JDLElBQUksS0FBSyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ25DLE1BQU0sSUFBSSxLQUFLLENBQUMsdUJBQXVCLEtBQUssb0JBQW9CLENBQUMsQ0FBQztRQUN0RSxDQUFDO0lBQ0wsQ0FBQztJQUVPLFdBQVcsQ0FBQyxJQUFZO1FBQzVCLE9BQU8sT0FBTyxJQUFJLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNoRCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlLCBSZXBsYXlTdWJqZWN0LCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEVkaXRvck9wdGlvbnMsIExhbmd1YWdlcywgVGhlbWVzIH0gZnJvbSAnLi4vLi4vbW9kZWxzJztcbmltcG9ydCB7IE1hcmtlciB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBDb3JlTGludGVycyB9IGZyb20gJy4uL3VzZS1jYXNlcy9jb3JlLWxpbnRlcnMnO1xuaW1wb3J0IHsgTGludGVyRmFjYWRlIH0gZnJvbSAnLi9saW50ZXItZmFjYWRlJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENvcmVGYWNhZGUge1xuICAgIHByaXZhdGUgJG9uQ29yZUZpbmlzaExvYWQ6IFJlcGxheVN1YmplY3Q8dm9pZD4gPSBuZXcgUmVwbGF5U3ViamVjdCgxKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5ICRvbkNvZGVDaGFuZ2U6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0KCk7XG4gICAgcHJpdmF0ZSByZWFkb25seSAkb25Db2RlVmFsaWRpdHlDaGFuZ2U6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdCgpO1xuICAgIHByaXZhdGUgX2NvbXBsZXRpb25JdGVtczogc3RyaW5nW10gPSBbXTtcbiAgICBwcml2YXRlIF9sYXN0Q29kZUVtaXR0ZWQgPSAnJztcbiAgICBwcml2YXRlIF9sYXN0Q29kZVZhbGlkaXR5RW1pdHRlZCE6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBfbGludGVyITogTGludGVyRmFjYWRlO1xuXG4gICAgcHVibGljIGNoYW5nZUVkaXRvck9wdGlvbnMob3B0aW9uczogRWRpdG9yT3B0aW9ucyk6IHZvaWQge1xuICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkVkaXRvcidzIG9wdGlvbnMgbXVzdCBiZSBhbiBFZGl0b3JPcHRpb25zIG9iamVjdFwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy52YWxpZGF0ZUxhbmd1YWdlKG9wdGlvbnMubGFuZ3VhZ2UgYXMgTGFuZ3VhZ2VzKTtcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVUaGVtZShvcHRpb25zLnRoZW1lIGFzIFRoZW1lcyk7XG4gICAgICAgICAgICB0aGlzLnNldExpbnRlcihvcHRpb25zLmxhbmd1YWdlIGFzIExhbmd1YWdlcyk7XG5cbiAgICAgICAgICAgIHRoaXMuc2V0Q29yZUVkaXRvck9wdGlvbnMob3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgY2hhbmdlQ29kZShjb2RlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc2FmZUNvZGUgPSB0aGlzLmdldFNhZmVDb2RlKGNvZGUpO1xuICAgICAgICBpZiAoc2FmZUNvZGUgIT09IHRoaXMuX2xhc3RDb2RlRW1pdHRlZCkge1xuICAgICAgICAgICAgdGhpcy5zZXRDb2RlKHNhZmVDb2RlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzZXRQYXlsb2FkKHBheWxvYWQ6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBzYWZlQ29kZSA9IHRoaXMuZ2V0U2FmZUNvZGUocGF5bG9hZCk7XG4gICAgICAgIC8vIEZvcsOnYSBhIGF0dWFsaXphw6fDo28gc2VtIHZlcmlmaWNhciBfbGFzdENvZGVFbWl0dGVkLFxuICAgICAgICAvLyBtYXMgcHJlc2VydmEgbyBjdXJzb3IgdmVyaWZpY2FuZG8gbm8gbsOtdmVsIGRvIGVkaXRvclxuICAgICAgICB0aGlzLnNldENvZGVXaXRoQ3Vyc29yUHJlc2VydmF0aW9uKHNhZmVDb2RlKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3Qgc2V0Q29kZVdpdGhDdXJzb3JQcmVzZXJ2YXRpb24oY29kZTogc3RyaW5nKTogdm9pZDtcblxuICAgIHB1YmxpYyBhYnN0cmFjdCBpbml0Q29yZSgpOiB2b2lkO1xuICAgIHB1YmxpYyBhYnN0cmFjdCBkZXN0cm95Q29yZSgpOiB2b2lkO1xuXG4gICAgcHVibGljIGFic3RyYWN0IHNldENvcmVXcmFwcGVyRWxlbWVudChlbGVtZW50OiBIVE1MRGl2RWxlbWVudCk6IHZvaWQ7XG4gICAgcHVibGljIGFic3RyYWN0IHNldENvZGUoY29kZTogc3RyaW5nKTogdm9pZDtcblxuICAgIHB1YmxpYyBnZXRPbkNvcmVGaW5pc2hMb2FkT2JzZXJ2YWJsZSgpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJG9uQ29yZUZpbmlzaExvYWQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldE9uQ29kZUNoYW5nZU9ic2VydmFibGUoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJG9uQ29kZUNoYW5nZS5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0T25Db2RlVmFsaWRpdHlDaGFuZ2VPYnNlcnZhYmxlKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gdGhpcy4kb25Db2RlVmFsaWRpdHlDaGFuZ2UuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IHNldENvcmVFZGl0b3JPcHRpb25zKG9wdGlvbnM6IEVkaXRvck9wdGlvbnMpOiB2b2lkO1xuICAgIHByb3RlY3RlZCBhYnN0cmFjdCBoaWdobGlnaHRDb2RlKG1hcmtlcnM6IE1hcmtlcltdKTogdm9pZDtcblxuICAgIHByb3RlY3RlZCBub3RpZnlDb3JlRmluaXNoTG9hZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy4kb25Db3JlRmluaXNoTG9hZC5uZXh0KCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHJlc2V0Q29yZUZpbmlzaExvYWQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuJG9uQ29yZUZpbmlzaExvYWQgPSBuZXcgUmVwbGF5U3ViamVjdCgxKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcmVzZXRMYXN0Q29kZUVtaXR0ZWQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2xhc3RDb2RlRW1pdHRlZCA9ICcnO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBub3RpZnlDb2RlQ2hhbmdlKGNvZGU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBzYWZlQ29kZSA9IHRoaXMuZ2V0U2FmZUNvZGUoY29kZSk7XG4gICAgICAgIGlmIChzYWZlQ29kZSAhPT0gdGhpcy5fbGFzdENvZGVFbWl0dGVkKSB7XG4gICAgICAgICAgICB0aGlzLl9sYXN0Q29kZUVtaXR0ZWQgPSBzYWZlQ29kZTtcbiAgICAgICAgICAgIHRoaXMuJG9uQ29kZUNoYW5nZS5uZXh0KHNhZmVDb2RlKTtcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVDb2RlKHNhZmVDb2RlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCB1cGRhdGVDb21wbGV0aW9uSXRlbXMoaXRlbXM6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NvbXBsZXRpb25JdGVtcyA9IGl0ZW1zIHx8IFtdO1xuICAgICAgICB0aGlzLnZhbGlkYXRlQ29kZSh0aGlzLl9sYXN0Q29kZUVtaXR0ZWQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0TGludGVyKGxhbmd1YWdlOiBMYW5ndWFnZXMpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fbGludGVyID0gQ29yZUxpbnRlcnMuZ2V0TGludGVyKGxhbmd1YWdlKSBhcyBMaW50ZXJGYWNhZGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyB2YWxpZGF0ZUNvZGUoY29kZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICh0aGlzLl9saW50ZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IG1hcmtlcnM6IE1hcmtlcltdID0gYXdhaXQgdGhpcy5fbGludGVyLmxpbnQoY29kZSwgdGhpcy5fY29tcGxldGlvbkl0ZW1zKTtcbiAgICAgICAgICAgIHRoaXMuaGlnaGxpZ2h0Q29kZShtYXJrZXJzKTtcbiAgICAgICAgICAgIHRoaXMubm90aWZ5Q29kZVZhbGlkaXR5Q2hhbmdlKCFtYXJrZXJzLmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG5vdGlmeUNvZGVWYWxpZGl0eUNoYW5nZSh2YWxpZGl0eTogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAodmFsaWRpdHkgIT09IHRoaXMuX2xhc3RDb2RlVmFsaWRpdHlFbWl0dGVkKSB7XG4gICAgICAgICAgICB0aGlzLl9sYXN0Q29kZVZhbGlkaXR5RW1pdHRlZCA9IHZhbGlkaXR5O1xuICAgICAgICAgICAgdGhpcy4kb25Db2RlVmFsaWRpdHlDaGFuZ2UubmV4dCh2YWxpZGl0eSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHZhbGlkYXRlTGFuZ3VhZ2UobGFuZ3VhZ2U6IExhbmd1YWdlcyk6IHZvaWQge1xuICAgICAgICBjb25zdCBsYW5ndWFnZXMgPSBPYmplY3QudmFsdWVzKExhbmd1YWdlcyk7XG4gICAgICAgIGlmIChsYW5ndWFnZSAmJiAhbGFuZ3VhZ2VzLmluY2x1ZGVzKGxhbmd1YWdlKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgaW5mb3JtZWQgbGFuZ3VhZ2UgXCIke2xhbmd1YWdlfVwiIGlzIG5vdCBzdXBwb3J0ZWRgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdmFsaWRhdGVUaGVtZSh0aGVtZTogVGhlbWVzKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRoZW1lcyA9IE9iamVjdC52YWx1ZXMoVGhlbWVzKTtcbiAgICAgICAgaWYgKHRoZW1lICYmICF0aGVtZXMuaW5jbHVkZXModGhlbWUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBpbmZvcm1lZCB0aGVtZSBcIiR7dGhlbWV9XCIgaXMgbm90IHN1cHBvcnRlZGApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRTYWZlQ29kZShjb2RlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdHlwZW9mIGNvZGUgPT09ICdzdHJpbmcnID8gY29kZSA6ICcnO1xuICAgIH1cbn1cbiJdfQ==