@senior-gestao-empresarial/erpx-components 4.12.0 → 4.12.1-develop-774d30bd

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.
@@ -76,16 +76,6 @@ let ErpRateioEditorComponent = ErpRateioEditorComponent_1 = class ErpRateioEdito
76
76
  get contasFormArray() {
77
77
  return this.formGroup.get('contas');
78
78
  }
79
- /**
80
- * Indica se o critério de rateio exige distribuição por centro de custo.
81
- * O critério 'V5' (Nenhum) não distribui por C. Custos; os demais exigem
82
- * ao menos um centro de custo por conta financeira.
83
- */
84
- get requiresCentroCusto() {
85
- var _a, _b;
86
- const criterio = (_b = (_a = this.loadedContext) === null || _a === void 0 ? void 0 : _a.criRat) !== null && _b !== void 0 ? _b : this.criRat;
87
- return criterio !== ErpRateioEditorComponent_1.CRITERIO_SEM_CENTRO_CUSTO;
88
- }
89
79
  get valorBase() {
90
80
  var _a, _b;
91
81
  return (_b = (_a = this.loadedContext) === null || _a === void 0 ? void 0 : _a.valorBase) !== null && _b !== void 0 ? _b : 0;
@@ -102,15 +92,12 @@ let ErpRateioEditorComponent = ErpRateioEditorComponent_1 = class ErpRateioEdito
102
92
  }
103
93
  /**
104
94
  * Valor restante a ser exibido nos cards de resumo.
105
- * Quando o critério exige centro de custo, considera o total já distribuído
106
- * nos CCs de todas as contas em vez do total das contas financeiras.
107
- * Assim o card reflete a distribuição real ponta-a-ponta.
95
+ * Considera o total distribuído nos centros de custo de todas as contas
96
+ * (e não o total das contas financeiras), refletindo a distribuição real
97
+ * ponta-a-ponta centro de custo é sempre obrigatório.
108
98
  */
109
99
  get valorRestanteDisplay() {
110
100
  var _a;
111
- if (!this.requiresCentroCusto) {
112
- return this.valorRestante;
113
- }
114
101
  const totalCC = this.contasDataSource.reduce((acc, conta) => acc + (conta.rateiosCCusto || []).reduce((ccAcc, cc) => ccAcc + (cc.valor || 0), 0), 0);
115
102
  return +(this.valorBase - totalCC).toFixed((_a = this.config.currencyScale) !== null && _a !== void 0 ? _a : 2);
116
103
  }
@@ -120,9 +107,6 @@ let ErpRateioEditorComponent = ErpRateioEditorComponent_1 = class ErpRateioEdito
120
107
  */
121
108
  get percentualRestanteDisplay() {
122
109
  var _a;
123
- if (!this.requiresCentroCusto) {
124
- return this.percentualRestante;
125
- }
126
110
  if (!this.valorBase) {
127
111
  return 0;
128
112
  }
@@ -186,7 +170,7 @@ let ErpRateioEditorComponent = ErpRateioEditorComponent_1 = class ErpRateioEdito
186
170
  if (this.effectiveReadOnly) {
187
171
  return;
188
172
  }
189
- if (this.requiresCentroCusto && this.hasContaSemCentroCusto()) {
173
+ if (this.hasContaSemCentroCusto()) {
190
174
  const message = this.translate.instant('erpx.rateio_editor.erro_centro_custo_obrigatorio');
191
175
  this.messageService.add({
192
176
  severity: 'error',
@@ -537,6 +521,9 @@ let ErpRateioEditorComponent = ErpRateioEditorComponent_1 = class ErpRateioEdito
537
521
  this.empresaId = (_c = (_b = (_a = this.initialContext) === null || _a === void 0 ? void 0 : _a.e070fil) === null || _b === void 0 ? void 0 : _b.e070emp) === null || _c === void 0 ? void 0 : _c.id;
538
522
  }
539
523
  this.gridColumns = this.getGridColumns();
524
+ // Emite o estado de validade já na carga inicial (sem marcar como "sujo"),
525
+ // permitindo que o host conheça o isValid mesmo sem o usuário editar.
526
+ this.emitChange(false);
540
527
  }
541
528
  carregarRateio() {
542
529
  this.loading = true;
@@ -550,6 +537,8 @@ let ErpRateioEditorComponent = ErpRateioEditorComponent_1 = class ErpRateioEdito
550
537
  this.empresaId = output.e070fil.e070emp.id;
551
538
  }
552
539
  this.gridColumns = this.getGridColumns();
540
+ // Emite o estado de validade do rateio carregado (sem marcar como "sujo").
541
+ this.emitChange(false);
553
542
  }, (err) => { var _a; return this.error.emit({ operacao: 'load', message: ((_a = err === null || err === void 0 ? void 0 : err.error) === null || _a === void 0 ? void 0 : _a.message) || (err === null || err === void 0 ? void 0 : err.message) || this.translate.instant('erpx.rateio_editor.erro_carregar'), originalError: err }); });
554
543
  }
555
544
  popularComRateios(rateios) {
@@ -583,8 +572,8 @@ let ErpRateioEditorComponent = ErpRateioEditorComponent_1 = class ErpRateioEdito
583
572
  var _a, _b;
584
573
  const ccs = conta.rateiosCCusto || [];
585
574
  if (ccs.length === 0) {
586
- // Sem centro de custo é válido quando o critério não exige rateio por C. Custos.
587
- return !this.requiresCentroCusto;
575
+ // Centro de custo é sempre obrigatório: conta sem nenhum CC nunca é completa.
576
+ return false;
588
577
  }
589
578
  const somaPct = ccs.reduce((acc, cc) => acc + (cc.percentual || 0), 0);
590
579
  const somaValor = ccs.reduce((acc, cc) => acc + (cc.valor || 0), 0);
@@ -699,14 +688,14 @@ let ErpRateioEditorComponent = ErpRateioEditorComponent_1 = class ErpRateioEdito
699
688
  }
700
689
  getGridColumns() {
701
690
  return [
702
- { field: 'contaFinanceira', header: this.translate.instant('erpx.rateio_editor.conta_financeira') },
703
- { field: 'percentual', header: this.translate.instant('erpx.rateio_editor.percentual') },
704
- { field: 'valorRateadoConta', header: this.translate.instant('erpx.rateio_editor.valor') }
691
+ { field: 'contaFinanceira', header: 'erpx.rateio_editor.conta_financeira' },
692
+ { field: 'percentual', header: 'erpx.rateio_editor.percentual' },
693
+ { field: 'valorRateadoConta', header: 'erpx.rateio_editor.valor' }
705
694
  ];
706
695
  }
707
- emitChange() {
696
+ emitChange(isDirty = true) {
708
697
  this.change.emit({
709
- isDirty: true,
698
+ isDirty,
710
699
  isValid: this.isDistribuicaoCompleta(),
711
700
  rateios: this.contasDataSource
712
701
  });
@@ -714,8 +703,6 @@ let ErpRateioEditorComponent = ErpRateioEditorComponent_1 = class ErpRateioEdito
714
703
  };
715
704
  /** Valor de anaSin que indica registro sintético (não analítico). */
716
705
  ErpRateioEditorComponent.ANA_SIN_SINTETICO = 'VS';
717
- /** Critério de rateio que não distribui por centro de custo (Nenhum). */
718
- ErpRateioEditorComponent.CRITERIO_SEM_CENTRO_CUSTO = 'V5';
719
706
  ErpRateioEditorComponent.ctorParameters = () => [
720
707
  { type: FormBuilder },
721
708
  { type: ErpRateioEditorService },
@@ -799,9 +786,9 @@ __decorate([
799
786
  ErpRateioEditorComponent = ErpRateioEditorComponent_1 = __decorate([
800
787
  Component({
801
788
  selector: 'erp-rateio-editor',
802
- template: "<s-loading-state [loading]=\"loading\" [blockWindow]=\"true\">\n <!-- Se\u00E7\u00E3o 1: Informa\u00E7\u00F5es do movimento -->\n <div class=\"sds-section-title\" *ngIf=\"isReady\">\n {{ 'erpx.rateio_editor.titulo' | translate }}\n </div>\n\n <div class=\"ui-g custom-stats\" *ngIf=\"isReady\">\n <div class=\"ui-sm-12 ui-md-4\">\n <s-stats-card\n [animateNumbers]=\"true\"\n color=\"#0C9348\"\n [lightMode]=\"true\"\n [lightVersion]=\"true\"\n iconClass=\"far fa-dollar-sign\"\n [label]=\"'erpx.rateio_editor.valor_base' | translate\"\n [value]=\"valorBase | numeric:numberFormatOptions | async\"\n ></s-stats-card>\n </div>\n <div class=\"ui-sm-12 ui-md-4\">\n <s-stats-card\n [animateNumbers]=\"true\"\n color=\"#428BCA\"\n [lightMode]=\"true\"\n [lightVersion]=\"true\"\n iconClass=\"far fa-percent\"\n [label]=\"'erpx.rateio_editor.percentual_restante' | translate\"\n [value]=\"percentualRestanteDisplay + '%'\"\n ></s-stats-card>\n </div>\n <div class=\"ui-sm-12 ui-md-4\">\n <s-stats-card\n [animateNumbers]=\"true\"\n [color]=\"distribuicaoCompleta ? '#0C9348' : '#C13018'\"\n [lightMode]=\"true\"\n [lightVersion]=\"true\"\n iconClass=\"far fa-dollar-sign\"\n [label]=\"'erpx.rateio_editor.valor_restante' | translate\"\n [value]=\"valorRestanteDisplay | numeric:numberFormatOptions | async\"\n ></s-stats-card>\n </div>\n </div>\n\n <!-- Se\u00E7\u00E3o 2: Tabela de rateios -->\n <div class=\"sds-section-title\" *ngIf=\"isReady\">\n {{ 'erpx.rateio_editor.lista_rateios' | translate }}\n </div>\n\n <s-empty-state\n *ngIf=\"isReady && contasDataSource?.length === 0\"\n iconClass=\"far fa-dollar-sign\"\n [title]=\"'erpx.rateio_editor.sem_rateios_titulo' | translate\"\n [description]=\"'erpx.rateio_editor.sem_rateios_descricao' | translate\"\n [showPrimaryAction]=\"!effectiveReadOnly\"\n [primaryActionLabel]=\"'erpx.rateio_editor.adicionar_conta' | translate\"\n (primaryAction)=\"openContaDialog()\"\n [showSecondaryAction]=\"!effectiveReadOnly && showSugestaoButton\"\n [secondaryActionLabel]=\"'erpx.rateio_editor.sugerir_rateio' | translate\"\n (secondaryAction)=\"onSugerir()\"\n ></s-empty-state>\n\n <div class=\"ui-g\" *ngIf=\"isReady && contasDataSource?.length > 0\">\n <div class=\"ui-g-12\" *ngIf=\"!effectiveReadOnly\">\n <s-button\n [label]=\"'erpx.rateio_editor.adicionar_conta' | translate\"\n iconClass=\"fa fa-plus\"\n (onClick)=\"openContaDialog()\"\n ></s-button>\n <s-button\n *ngIf=\"showSugestaoButton\"\n [label]=\"'erpx.rateio_editor.sugerir_rateio' | translate\"\n [priority]=\"ButtonPriority.Secondary\"\n iconClass=\"fa fa-magic\"\n (onClick)=\"onSugerir()\"\n ></s-button>\n <s-button\n [label]=\"'erpx.rateio_editor.remover_conta' | translate\"\n [priority]=\"ButtonPriority.Secondary\"\n (onClick)=\"onDeleteSelected()\"\n [disabled]=\"!selection.length\"\n ></s-button>\n </div>\n\n <div class=\"ui-g-12\">\n <p-table\n #tableRateio\n [value]=\"contasDataSource\"\n [columns]=\"gridColumns\"\n dataKey=\"idContaFinanceira\"\n [resizableColumns]=\"true\"\n [totalRecords]=\"contasDataSource.length\"\n [(selection)]=\"selection\"\n [paginator]=\"false\"\n [rows]=\"10\"\n >\n <ng-template pTemplate=\"header\" let-columns>\n <tr>\n <th scope=\"col\" style=\"width: 3em\"></th>\n <th scope=\"col\" class=\"col-checkbox\" style=\"width: 50px\">\n <p-tableHeaderCheckbox *ngIf=\"!effectiveReadOnly\"></p-tableHeaderCheckbox>\n </th>\n <th *ngFor=\"let col of columns\" scope=\"col\" pResizableColumn>\n <div class=\"senior-header\">\n <span class=\"senior-header-title\">{{ col.header }}</span>\n </div>\n </th>\n <th scope=\"col\" *ngIf=\"!effectiveReadOnly\">\n <div class=\"senior-header\">\n <span class=\"senior-header-title\">{{ 'erpx.rateio_editor.acoes' | translate }}</span>\n </div>\n </th>\n </tr>\n </ng-template>\n\n <ng-template pTemplate=\"body\" let-rowData let-rowIndex=\"rowIndex\" let-expanded=\"expanded\">\n <tr>\n <td style=\"width: 3em; text-align: center\">\n <a *ngIf=\"rowData.rateiosCCusto?.length || (!effectiveReadOnly && requiresCentroCusto)\" [pRowToggler]=\"rowData\" role=\"button\" tabindex=\"0\">\n <i [class]=\"expanded ? 'fa fa-minus' : 'fa fa-plus'\"></i>\n </a>\n </td>\n <td class=\"col-checkbox\" style=\"width: 50px\">\n <p-tableCheckbox *ngIf=\"!effectiveReadOnly\" [value]=\"rowData\"></p-tableCheckbox>\n </td>\n <td>{{ rowData.contaFinanceira || rowData.idContaFinanceira }}</td>\n <td style=\"text-align: right\">{{ rowData.percentual }}</td>\n <td style=\"text-align: right\">{{ rowData.valorRateadoConta | numeric:numberFormatOptions | async }}</td>\n <td *ngIf=\"!effectiveReadOnly\">\n <s-button\n [auxiliary]=\"true\"\n [priority]=\"ButtonPriority.Default\"\n [size]=\"ButtonSize.Small\"\n iconClass=\"fa fa-pencil\"\n [label]=\"'erpx.rateio_editor.editar' | translate\"\n (onClick)=\"openContaDialog(getContaIndex(rowData))\"\n ></s-button>\n </td>\n </tr>\n </ng-template>\n\n <ng-template pTemplate=\"rowexpansion\" let-rowData let-rowIndex=\"rowIndex\">\n <tr>\n <td [attr.colspan]=\"effectiveReadOnly ? gridColumns.length + 2 : gridColumns.length + 3\">\n <div class=\"ui-g\" style=\"padding: 8px 16px\">\n <div class=\"ui-g-12 rateio-cc-toolbar\" *ngIf=\"!effectiveReadOnly\">\n <s-button\n [label]=\"'erpx.rateio_editor.adicionar_centro_custo' | translate\"\n iconClass=\"fa fa-plus\"\n (onClick)=\"openCCDialog(getContaIndex(rowData))\"\n ></s-button>\n <s-button\n [label]=\"'erpx.rateio_editor.remover_centro_custo' | translate\"\n [priority]=\"ButtonPriority.Secondary\"\n (onClick)=\"onDeleteSelectedCC(rowData)\"\n [disabled]=\"!(ccSelection[rowData.idContaFinanceira]?.length)\"\n ></s-button>\n </div>\n <div class=\"ui-g-12\">\n <p-table\n [value]=\"rowData.rateiosCCusto\"\n dataKey=\"idCentroCusto\"\n [(selection)]=\"ccSelection[rowData.idContaFinanceira]\"\n [responsive]=\"true\"\n >\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"col\" class=\"col-checkbox\" style=\"width: 50px\">\n <p-tableHeaderCheckbox *ngIf=\"!effectiveReadOnly\"></p-tableHeaderCheckbox>\n </th>\n <th scope=\"col\">{{ 'erpx.rateio_editor.centro_custo' | translate }}</th>\n <th scope=\"col\">{{ 'erpx.rateio_editor.percentual' | translate }}</th>\n <th scope=\"col\">{{ 'erpx.rateio_editor.valor' | translate }}</th>\n <th scope=\"col\" *ngIf=\"!effectiveReadOnly\">{{ 'erpx.rateio_editor.acoes' | translate }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\" let-cc let-ccIndex=\"rowIndex\">\n <tr>\n <td class=\"col-checkbox\" style=\"width: 50px\">\n <p-tableCheckbox *ngIf=\"!effectiveReadOnly\" [value]=\"cc\"></p-tableCheckbox>\n </td>\n <td>{{ cc.descCCusto || cc.idCentroCusto }}</td>\n <td style=\"text-align: right\">{{ cc.percentual }}</td>\n <td style=\"text-align: right\">{{ cc.valor | numeric:numberFormatOptions | async }}</td>\n <td *ngIf=\"!effectiveReadOnly\">\n <s-button\n [auxiliary]=\"true\"\n [priority]=\"ButtonPriority.Default\"\n [size]=\"ButtonSize.Small\"\n iconClass=\"fa fa-pencil\"\n [label]=\"'erpx.rateio_editor.editar' | translate\"\n (onClick)=\"openCCDialog(getContaIndex(rowData), getCCIndex(rowData, cc))\"\n ></s-button>\n </td>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"emptymessage\">\n <tr>\n <td [attr.colspan]=\"effectiveReadOnly ? 3 : 5\">\n {{ 'erpx.rateio_editor.sem_centros_custo' | translate }}\n </td>\n </tr>\n </ng-template>\n </p-table>\n </div>\n </div>\n </td>\n </tr>\n </ng-template>\n </p-table>\n </div>\n </div>\n\n <!-- Bot\u00F5es de a\u00E7\u00E3o -->\n <div *ngIf=\"isReady\" class=\"ui-g rateio-editor-actions\">\n <div class=\"ui-g-12\">\n <s-button\n *ngIf=\"!effectiveReadOnly && !isStandalone\"\n priority=\"primary\"\n iconClass=\"fa fa-check\"\n [label]=\"'erpx.rateio_editor.salvar' | translate\"\n (onClick)=\"onSalvar()\"\n ></s-button>\n </div>\n </div>\n</s-loading-state>\n\n<!-- Modal: Adicionar/Editar Conta Financeira -->\n<p-dialog\n [header]=\"'erpx.rateio_editor.adicionar_conta' | translate\"\n appendTo=\"body\"\n [modal]=\"true\"\n [(visible)]=\"displayContaDialog\"\n (onHide)=\"onHideContaDialog()\"\n [blockScroll]=\"true\"\n [focusOnShow]=\"false\"\n styleClass=\"custom-dialog\"\n [draggable]=\"false\"\n [resizable]=\"false\"\n [style]=\"{width: '40%'}\"\n>\n <form *ngIf=\"contaDialogFormGroup\" [formGroup]=\"contaDialogFormGroup\" (ngSubmit)=\"onSaveContaDialog()\">\n <div class=\"ui-fluid\">\n <s-dynamic-form\n [fields]=\"contaDialogFields\"\n [form]=\"contaDialogFormGroup\"\n [errorMessages]=\"{\n required: ('erpx.rateio_editor.erro_obrigatorio' | translate),\n duplicate: ('erpx.rateio_editor.conta_duplicada' | translate),\n contaSintetica: ('erpx.rateio_editor.erro_conta_sintetica' | translate),\n max: ('erpx.rateio_editor.erro_valor_maximo_conta' | translate)\n }\"\n ></s-dynamic-form>\n </div>\n </form>\n <p-footer>\n <s-button\n id=\"dialog-conta-save\"\n type=\"button\"\n priority=\"primary\"\n [label]=\"'erpx.rateio_editor.salvar' | translate\"\n (onClick)=\"onSaveContaDialog()\"\n ></s-button>\n <s-button\n id=\"dialog-conta-cancel\"\n type=\"button\"\n priority=\"secondary\"\n [label]=\"'erpx.rateio_editor.cancelar' | translate\"\n (onClick)=\"onHideContaDialog()\"\n ></s-button>\n </p-footer>\n</p-dialog>\n\n<!-- Modal: Adicionar/Editar Centro de Custo -->\n<p-dialog\n [header]=\"'erpx.rateio_editor.adicionar_centro_custo' | translate\"\n appendTo=\"body\"\n [modal]=\"true\"\n [(visible)]=\"displayCCDialog\"\n (onHide)=\"onHideCCDialog()\"\n [blockScroll]=\"true\"\n [focusOnShow]=\"false\"\n styleClass=\"custom-dialog\"\n [draggable]=\"false\"\n [resizable]=\"false\"\n [style]=\"{width: '40%'}\"\n>\n <form *ngIf=\"ccDialogFormGroup\" [formGroup]=\"ccDialogFormGroup\" (ngSubmit)=\"onSaveCCDialog()\">\n <div class=\"ui-fluid\">\n <s-dynamic-form\n [fields]=\"ccDialogFields\"\n [form]=\"ccDialogFormGroup\"\n [errorMessages]=\"{\n required: ('erpx.rateio_editor.erro_obrigatorio' | translate),\n duplicate: ('erpx.rateio_editor.centro_custo_duplicado' | translate),\n centroCustoInvalido: ('erpx.rateio_editor.erro_centro_custo_invalido' | translate),\n max: ('erpx.rateio_editor.erro_maximo_centro_custo' | translate)\n }\"\n ></s-dynamic-form>\n </div>\n </form>\n <p-footer>\n <s-button\n id=\"dialog-cc-save\"\n type=\"button\"\n priority=\"primary\"\n [label]=\"'erpx.rateio_editor.salvar' | translate\"\n (onClick)=\"onSaveCCDialog()\"\n ></s-button>\n <s-button\n id=\"dialog-cc-cancel\"\n type=\"button\"\n priority=\"secondary\"\n [label]=\"'erpx.rateio_editor.cancelar' | translate\"\n (onClick)=\"onHideCCDialog()\"\n ></s-button>\n </p-footer>\n</p-dialog>\n",
789
+ template: "<s-loading-state [loading]=\"loading\" [blockWindow]=\"true\">\n <!-- Se\u00E7\u00E3o 1: Informa\u00E7\u00F5es do movimento -->\n <div class=\"sds-section-title\" *ngIf=\"isReady\">\n {{ 'erpx.rateio_editor.titulo' | translate }}\n </div>\n\n <div class=\"ui-g custom-stats\" *ngIf=\"isReady\">\n <div class=\"ui-sm-12 ui-md-4\">\n <s-stats-card\n [animateNumbers]=\"true\"\n color=\"#0C9348\"\n [lightMode]=\"true\"\n [lightVersion]=\"true\"\n iconClass=\"far fa-dollar-sign\"\n [label]=\"'erpx.rateio_editor.valor_base' | translate\"\n [value]=\"valorBase | numeric:numberFormatOptions | async\"\n ></s-stats-card>\n </div>\n <div class=\"ui-sm-12 ui-md-4\">\n <s-stats-card\n [animateNumbers]=\"true\"\n color=\"#428BCA\"\n [lightMode]=\"true\"\n [lightVersion]=\"true\"\n iconClass=\"far fa-percent\"\n [label]=\"'erpx.rateio_editor.percentual_restante' | translate\"\n [value]=\"percentualRestanteDisplay + '%'\"\n ></s-stats-card>\n </div>\n <div class=\"ui-sm-12 ui-md-4\">\n <s-stats-card\n [animateNumbers]=\"true\"\n [color]=\"distribuicaoCompleta ? '#0C9348' : '#C13018'\"\n [lightMode]=\"true\"\n [lightVersion]=\"true\"\n iconClass=\"far fa-dollar-sign\"\n [label]=\"'erpx.rateio_editor.valor_restante' | translate\"\n [value]=\"valorRestanteDisplay | numeric:numberFormatOptions | async\"\n ></s-stats-card>\n </div>\n </div>\n\n <!-- Se\u00E7\u00E3o 2: Tabela de rateios -->\n <div class=\"sds-section-title\" *ngIf=\"isReady\">\n {{ 'erpx.rateio_editor.lista_rateios' | translate }}\n </div>\n\n <s-empty-state\n *ngIf=\"isReady && contasDataSource?.length === 0\"\n iconClass=\"far fa-dollar-sign\"\n [title]=\"'erpx.rateio_editor.sem_rateios_titulo' | translate\"\n [description]=\"'erpx.rateio_editor.sem_rateios_descricao' | translate\"\n [showPrimaryAction]=\"!effectiveReadOnly\"\n [primaryActionLabel]=\"'erpx.rateio_editor.adicionar_conta' | translate\"\n (primaryAction)=\"openContaDialog()\"\n [showSecondaryAction]=\"!effectiveReadOnly && showSugestaoButton\"\n [secondaryActionLabel]=\"'erpx.rateio_editor.sugerir_rateio' | translate\"\n (secondaryAction)=\"onSugerir()\"\n ></s-empty-state>\n\n <div class=\"ui-g\" *ngIf=\"isReady && contasDataSource?.length > 0\">\n <div class=\"ui-g-12\" *ngIf=\"!effectiveReadOnly\">\n <s-button\n [label]=\"'erpx.rateio_editor.adicionar_conta' | translate\"\n iconClass=\"fa fa-plus\"\n (onClick)=\"openContaDialog()\"\n ></s-button>\n <s-button\n *ngIf=\"showSugestaoButton\"\n [label]=\"'erpx.rateio_editor.sugerir_rateio' | translate\"\n [priority]=\"ButtonPriority.Secondary\"\n iconClass=\"fa fa-magic\"\n (onClick)=\"onSugerir()\"\n ></s-button>\n <s-button\n [label]=\"'erpx.rateio_editor.remover_conta' | translate\"\n [priority]=\"ButtonPriority.Secondary\"\n (onClick)=\"onDeleteSelected()\"\n [disabled]=\"!selection.length\"\n ></s-button>\n </div>\n\n <div class=\"ui-g-12\">\n <p-table\n #tableRateio\n [value]=\"contasDataSource\"\n [columns]=\"gridColumns\"\n dataKey=\"idContaFinanceira\"\n [resizableColumns]=\"true\"\n [totalRecords]=\"contasDataSource.length\"\n [(selection)]=\"selection\"\n [paginator]=\"false\"\n [rows]=\"10\"\n >\n <ng-template pTemplate=\"header\" let-columns>\n <tr>\n <th scope=\"col\" style=\"width: 3em\"></th>\n <th scope=\"col\" class=\"col-checkbox\" style=\"width: 50px\">\n <p-tableHeaderCheckbox *ngIf=\"!effectiveReadOnly\"></p-tableHeaderCheckbox>\n </th>\n <th *ngFor=\"let col of columns\" scope=\"col\" pResizableColumn>\n <div class=\"senior-header\">\n <span class=\"senior-header-title\">{{ col.header | translate }}</span>\n </div>\n </th>\n <th scope=\"col\" *ngIf=\"!effectiveReadOnly\">\n <div class=\"senior-header\">\n <span class=\"senior-header-title\">{{ 'erpx.rateio_editor.acoes' | translate }}</span>\n </div>\n </th>\n </tr>\n </ng-template>\n\n <ng-template pTemplate=\"body\" let-rowData let-rowIndex=\"rowIndex\" let-expanded=\"expanded\">\n <tr>\n <td style=\"width: 3em; text-align: center\">\n <a *ngIf=\"rowData.rateiosCCusto?.length || !effectiveReadOnly\" [pRowToggler]=\"rowData\" role=\"button\" tabindex=\"0\">\n <i [class]=\"expanded ? 'fa fa-minus' : 'fa fa-plus'\"></i>\n </a>\n </td>\n <td class=\"col-checkbox\" style=\"width: 50px\">\n <p-tableCheckbox *ngIf=\"!effectiveReadOnly\" [value]=\"rowData\"></p-tableCheckbox>\n </td>\n <td>{{ rowData.contaFinanceira || rowData.idContaFinanceira }}</td>\n <td style=\"text-align: right\">{{ rowData.percentual }}</td>\n <td style=\"text-align: right\">{{ rowData.valorRateadoConta | numeric:numberFormatOptions | async }}</td>\n <td *ngIf=\"!effectiveReadOnly\">\n <s-button\n [auxiliary]=\"true\"\n [priority]=\"ButtonPriority.Default\"\n [size]=\"ButtonSize.Small\"\n iconClass=\"fa fa-pencil\"\n [label]=\"'erpx.rateio_editor.editar' | translate\"\n (onClick)=\"openContaDialog(getContaIndex(rowData))\"\n ></s-button>\n </td>\n </tr>\n </ng-template>\n\n <ng-template pTemplate=\"rowexpansion\" let-rowData let-rowIndex=\"rowIndex\">\n <tr>\n <td [attr.colspan]=\"effectiveReadOnly ? gridColumns.length + 2 : gridColumns.length + 3\">\n <div class=\"ui-g\" style=\"padding: 8px 16px\">\n <div class=\"ui-g-12 rateio-cc-toolbar\" *ngIf=\"!effectiveReadOnly\">\n <s-button\n [label]=\"'erpx.rateio_editor.adicionar_centro_custo' | translate\"\n iconClass=\"fa fa-plus\"\n (onClick)=\"openCCDialog(getContaIndex(rowData))\"\n ></s-button>\n <s-button\n [label]=\"'erpx.rateio_editor.remover_centro_custo' | translate\"\n [priority]=\"ButtonPriority.Secondary\"\n (onClick)=\"onDeleteSelectedCC(rowData)\"\n [disabled]=\"!(ccSelection[rowData.idContaFinanceira]?.length)\"\n ></s-button>\n </div>\n <div class=\"ui-g-12\">\n <p-table\n [value]=\"rowData.rateiosCCusto\"\n dataKey=\"idCentroCusto\"\n [(selection)]=\"ccSelection[rowData.idContaFinanceira]\"\n [responsive]=\"true\"\n >\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"col\" class=\"col-checkbox\" style=\"width: 50px\">\n <p-tableHeaderCheckbox *ngIf=\"!effectiveReadOnly\"></p-tableHeaderCheckbox>\n </th>\n <th scope=\"col\">{{ 'erpx.rateio_editor.centro_custo' | translate }}</th>\n <th scope=\"col\">{{ 'erpx.rateio_editor.percentual' | translate }}</th>\n <th scope=\"col\">{{ 'erpx.rateio_editor.valor' | translate }}</th>\n <th scope=\"col\" *ngIf=\"!effectiveReadOnly\">{{ 'erpx.rateio_editor.acoes' | translate }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\" let-cc let-ccIndex=\"rowIndex\">\n <tr>\n <td class=\"col-checkbox\" style=\"width: 50px\">\n <p-tableCheckbox *ngIf=\"!effectiveReadOnly\" [value]=\"cc\"></p-tableCheckbox>\n </td>\n <td>{{ cc.descCCusto || cc.idCentroCusto }}</td>\n <td style=\"text-align: right\">{{ cc.percentual }}</td>\n <td style=\"text-align: right\">{{ cc.valor | numeric:numberFormatOptions | async }}</td>\n <td *ngIf=\"!effectiveReadOnly\">\n <s-button\n [auxiliary]=\"true\"\n [priority]=\"ButtonPriority.Default\"\n [size]=\"ButtonSize.Small\"\n iconClass=\"fa fa-pencil\"\n [label]=\"'erpx.rateio_editor.editar' | translate\"\n (onClick)=\"openCCDialog(getContaIndex(rowData), getCCIndex(rowData, cc))\"\n ></s-button>\n </td>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"emptymessage\">\n <tr>\n <td [attr.colspan]=\"effectiveReadOnly ? 3 : 5\">\n {{ 'erpx.rateio_editor.sem_centros_custo' | translate }}\n </td>\n </tr>\n </ng-template>\n </p-table>\n </div>\n </div>\n </td>\n </tr>\n </ng-template>\n </p-table>\n </div>\n </div>\n\n <!-- Bot\u00F5es de a\u00E7\u00E3o -->\n <div *ngIf=\"isReady\" class=\"ui-g rateio-editor-actions\">\n <div class=\"ui-g-12\">\n <s-button\n *ngIf=\"!effectiveReadOnly && !isStandalone\"\n priority=\"primary\"\n iconClass=\"fa fa-check\"\n [label]=\"'erpx.rateio_editor.salvar' | translate\"\n (onClick)=\"onSalvar()\"\n ></s-button>\n </div>\n </div>\n</s-loading-state>\n\n<!-- Modal: Adicionar/Editar Conta Financeira -->\n<p-dialog\n [header]=\"'erpx.rateio_editor.adicionar_conta' | translate\"\n appendTo=\"body\"\n [modal]=\"true\"\n [(visible)]=\"displayContaDialog\"\n (onHide)=\"onHideContaDialog()\"\n [blockScroll]=\"true\"\n [focusOnShow]=\"false\"\n styleClass=\"custom-dialog\"\n [draggable]=\"false\"\n [resizable]=\"false\"\n [style]=\"{width: '40%'}\"\n>\n <form *ngIf=\"contaDialogFormGroup\" [formGroup]=\"contaDialogFormGroup\" (ngSubmit)=\"onSaveContaDialog()\">\n <div class=\"ui-fluid\">\n <s-dynamic-form\n [fields]=\"contaDialogFields\"\n [form]=\"contaDialogFormGroup\"\n [errorMessages]=\"{\n required: ('erpx.rateio_editor.erro_obrigatorio' | translate),\n duplicate: ('erpx.rateio_editor.conta_duplicada' | translate),\n contaSintetica: ('erpx.rateio_editor.erro_conta_sintetica' | translate),\n max: ('erpx.rateio_editor.erro_valor_maximo_conta' | translate)\n }\"\n ></s-dynamic-form>\n </div>\n </form>\n <p-footer>\n <s-button\n id=\"dialog-conta-save\"\n type=\"button\"\n priority=\"primary\"\n [label]=\"'erpx.rateio_editor.salvar' | translate\"\n (onClick)=\"onSaveContaDialog()\"\n ></s-button>\n <s-button\n id=\"dialog-conta-cancel\"\n type=\"button\"\n priority=\"secondary\"\n [label]=\"'erpx.rateio_editor.cancelar' | translate\"\n (onClick)=\"onHideContaDialog()\"\n ></s-button>\n </p-footer>\n</p-dialog>\n\n<!-- Modal: Adicionar/Editar Centro de Custo -->\n<p-dialog\n [header]=\"'erpx.rateio_editor.adicionar_centro_custo' | translate\"\n appendTo=\"body\"\n [modal]=\"true\"\n [(visible)]=\"displayCCDialog\"\n (onHide)=\"onHideCCDialog()\"\n [blockScroll]=\"true\"\n [focusOnShow]=\"false\"\n styleClass=\"custom-dialog\"\n [draggable]=\"false\"\n [resizable]=\"false\"\n [style]=\"{width: '40%'}\"\n>\n <form *ngIf=\"ccDialogFormGroup\" [formGroup]=\"ccDialogFormGroup\" (ngSubmit)=\"onSaveCCDialog()\">\n <div class=\"ui-fluid\">\n <s-dynamic-form\n [fields]=\"ccDialogFields\"\n [form]=\"ccDialogFormGroup\"\n [errorMessages]=\"{\n required: ('erpx.rateio_editor.erro_obrigatorio' | translate),\n duplicate: ('erpx.rateio_editor.centro_custo_duplicado' | translate),\n centroCustoInvalido: ('erpx.rateio_editor.erro_centro_custo_invalido' | translate),\n max: ('erpx.rateio_editor.erro_maximo_centro_custo' | translate)\n }\"\n ></s-dynamic-form>\n </div>\n </form>\n <p-footer>\n <s-button\n id=\"dialog-cc-save\"\n type=\"button\"\n priority=\"primary\"\n [label]=\"'erpx.rateio_editor.salvar' | translate\"\n (onClick)=\"onSaveCCDialog()\"\n ></s-button>\n <s-button\n id=\"dialog-cc-cancel\"\n type=\"button\"\n priority=\"secondary\"\n [label]=\"'erpx.rateio_editor.cancelar' | translate\"\n (onClick)=\"onHideCCDialog()\"\n ></s-button>\n </p-footer>\n</p-dialog>\n",
803
790
  styles: [":host ::ng-deep .rateio-cc-toolbar .s-button-text{overflow:visible;-ms-flex-pack:start;justify-content:flex-start}"]
804
791
  })
805
792
  ], ErpRateioEditorComponent);
806
793
  export { ErpRateioEditorComponent };
807
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJwLXJhdGVpby1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHNlbmlvci1nZXN0YW8tZW1wcmVzYXJpYWwvZXJweC1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiY29tcG9uZW50cy9yYXRlaW8tZWRpdG9yL2VycC1yYXRlaW8tZWRpdG9yLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBd0IsTUFBTSxFQUFpQixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkgsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQy9FLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLG1CQUFtQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDbEgsT0FBTyxFQUNILGNBQWMsRUFDZCxVQUFVLEVBQ1YsU0FBUyxFQUNULFNBQVMsRUFDWixNQUFNLG9DQUFvQyxDQUFDO0FBRTVDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQWtCckUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQU96QyxJQUFhLHdCQUF3QixnQ0FBckMsTUFBYSx3QkFBd0I7SUE2T2pDLFlBQ3FCLEVBQWUsRUFDZixPQUErQixFQUMvQixTQUEyQixFQUMzQixhQUE0QixFQUM1QixhQUE0QixFQUM1QixjQUE4QjtRQUw5QixPQUFFLEdBQUYsRUFBRSxDQUFhO1FBQ2YsWUFBTyxHQUFQLE9BQU8sQ0FBd0I7UUFD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QWlEOztLQUVwRCxDQUFDO0dBQ1csd0JBQXdCLENBNDJCcEM7U0E1MkJZLHdCQUF3QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIE91dHB1dCwgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQXJyYXksIEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBFMDQ0Q2N1TG9va3VwLCBFMDkxUGxmTG9va3VwLCBFbnVtTG9naWNhbE9wZXJhdG9yIH0gZnJvbSAnQHNlbmlvci1nZXN0YW8tZW1wcmVzYXJpYWwvYW5ndWxhci1jb21wb25lbnRzJztcbmltcG9ydCB7XG4gICAgQnV0dG9uUHJpb3JpdHksXG4gICAgQnV0dG9uU2l6ZSxcbiAgICBGaWVsZFR5cGUsXG4gICAgRm9ybUZpZWxkXG59IGZyb20gJ0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgVGFibGUgfSBmcm9tICdwcmltZW5nL3RhYmxlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbmFsaXplLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBFcnBSYXRlaW9FZGl0b3JTZXJ2aWNlIH0gZnJvbSAnLi9lcnAtcmF0ZWlvLWVkaXRvci5zZXJ2aWNlJztcbmltcG9ydCB7XG4gICAgR3JhdmFyUmF0ZWlvTWFudWFsSW5wdXQsXG4gICAgSW50ZWdyYWNhb0NvbnRyb2xhZG9yaWEsXG4gICAgUmF0ZWlvQ2hhbmdlRXZlbnQsXG4gICAgUmF0ZWlvQ29udGEsXG4gICAgUmF0ZWlvQ0N1c3RvLFxuICAgIFJhdGVpb0VkaXRvckNvbmZpZyxcbiAgICBSYXRlaW9FcnJvckV2ZW50LFxuICAgIFJhdGVpb1NhdmVFdmVudCxcbiAgICBSZXRvcm5hclJhdGVpb091dHB1dCxcbiAgICBTdWdlcmlyUmF0ZWlvSW5wdXQsXG4gICAgU3VnZXJpclJhdGVpb1BhcmFtZXRybyxcbiAgICBUaXBvTW92aW1lbnRvLFxuICAgIENyaXRlcmlvUmF0ZWlvLFxuICAgIENvbnRhRmluYW5jZWlyYUxvb2t1cCxcbiAgICBDZW50cm9DdXN0b0xvb2t1cFxufSBmcm9tICcuL2VycC1yYXRlaW8tZWRpdG9yLnR5cGVzJztcbmltcG9ydCB7IE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAncHJpbWVuZyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZXJwLXJhdGVpby1lZGl0b3InLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9lcnAtcmF0ZWlvLWVkaXRvci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vZXJwLXJhdGVpby1lZGl0b3IuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBFcnBSYXRlaW9FZGl0b3JDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG5cbiAgICAvKiogVmFsb3IgZGUgYW5hU2luIHF1ZSBpbmRpY2EgcmVnaXN0cm8gc2ludMOpdGljbyAobsOjbyBhbmFsw610aWNvKS4gKi9cbiAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBBTkFfU0lOX1NJTlRFVElDTyA9ICdWUyc7XG5cbiAgICAvKiogQ3JpdMOpcmlvIGRlIHJhdGVpbyBxdWUgbsOjbyBkaXN0cmlidWkgcG9yIGNlbnRybyBkZSBjdXN0byAoTmVuaHVtKS4gKi9cbiAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBDUklURVJJT19TRU1fQ0VOVFJPX0NVU1RPOiBDcml0ZXJpb1JhdGVpbyA9ICdWNSc7XG5cbiAgICAvLyA9PT0gSU5QVVRTID09PVxuICAgIEBJbnB1dCgpIGlkTW92aW1lbnRvOiBzdHJpbmc7XG4gICAgQElucHV0KCkgdGlwb01vdmltZW50bzogVGlwb01vdmltZW50bztcbiAgICBASW5wdXQoKSByZWFkT25seSA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHNob3dTdWdlc3Rhb0J1dHRvbiA9IHRydWU7XG4gICAgQElucHV0KCkgY29uZmlnOiBSYXRlaW9FZGl0b3JDb25maWc7XG5cbiAgICAvKipcbiAgICAgKiBDb250ZXh0byBpbmljaWFsIHVzYWRvIHF1YW5kbyBvIGNvbXBvbmVudGUgw6kgYWxpbWVudGFkbyBwb3IgaW5wdXRzIGVtIHZleiBkYSBBUEkuXG4gICAgICogQXBsaWNhLXNlIGFvIG1vZG8gc3RhbmRhbG9uZSAoc2VtIGlkTW92aW1lbnRvKSBlIGFvIG1vZG8gY29uZWN0YWRvIGNvbVxuICAgICAqIGxvYWRGcm9tQXBpID0gZmFsc2UuIEZvcm5lY2UgdmFsb3JCYXNlLCBmaWxpYWwsIGNyaXTDqXJpbywgYWdydXBhZG9ySWQsIGRhdGFzLCBldGMuXG4gICAgICogRW0gbW9kbyBjb25lY3RhZG8gc2VtIGNhcmdhIHZpYSBBUEksIMOpIGRlc3RlIGNvbnRleHRvIHF1ZSBhIGdyYXZhw6fDo29cbiAgICAgKiAoZ3JhdmFyUmF0ZWlvTWFudWFsKSBvYnTDqW0gZTA3MGZpbCwgY3JpUmF0LCBkYXRhQmFzZSwgZGF0YU1vdmltZW50byBlIGFncnVwYWRvcklkLlxuICAgICAqL1xuICAgIEBJbnB1dCgpIGluaXRpYWxDb250ZXh0PzogUGFydGlhbDxSZXRvcm5hclJhdGVpb091dHB1dD47XG5cbiAgICAvKiogUmF0ZWlvcyBpbmljaWFpcyBwYXJhIHBvcHVsYXIgYSBncmlkIHF1YW5kbyBhbGltZW50YWRvIHBvciBpbnB1dHMuICovXG4gICAgQElucHV0KCkgaW5pdGlhbFJhdGVpb3M/OiBSYXRlaW9Db250YVtdO1xuXG4gICAgLyoqXG4gICAgICogQ29udHJvbGEgc2UgbyByYXRlaW8gZGV2ZSBzZXIgY2FycmVnYWRvIGF1dG9tYXRpY2FtZW50ZSB2aWEgQVBJIHF1YW5kb1xuICAgICAqIGlkTW92aW1lbnRvIGVzdMOhIHByZXNlbnRlIChtb2RvIGNvbmVjdGFkbykuIERlZmF1bHQ6IHRydWUuXG4gICAgICpcbiAgICAgKiBEZWZpbmEgY29tbyBmYWxzZSBwYXJhIHJlc3RhdXJhciB1bSByYXRlaW8gcXVlIG8gdXN1w6FyaW8gasOhIGRpc3RyaWJ1aXUgZSBxdWVcbiAgICAgKiBhaW5kYSBuw6NvIGZvaSBwZXJzaXN0aWRvIG5vIGJhY2tlbmQgZGUgcmF0ZWlvOiBvIGNvbXBvbmVudGUgcG9wdWxhIGEgZ3JpZCBhXG4gICAgICogcGFydGlyIGRlIGluaXRpYWxDb250ZXh0L2luaXRpYWxSYXRlaW9zIGUgbWFudMOpbSBvIGJvdMOjbyBTYWx2YXIgZSBhIGdyYXZhw6fDo29cbiAgICAgKiB2aW5jdWxhZGEgYW8gbW92aW1lbnRvLlxuICAgICAqL1xuICAgIEBJbnB1dCgpIGxvYWRGcm9tQXBpID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIElEIGRhIGVtcHJlc2EgdXNhZG8gcGFyYSBmaWx0cmFyIG9zIGxvb2t1cHMgZGUgY29udGEgZmluYW5jZWlyYSBlIGNlbnRybyBkZSBjdXN0by5cbiAgICAgKiBRdWFuZG8gaW5mb3JtYWRvLCBzb2JyZXNjcmV2ZSBvIElEIGRlcml2YWRvIGRvIGNvbnRleHRvIGNhcnJlZ2Fkby9pbmljaWFsLlxuICAgICAqL1xuICAgIEBJbnB1dCgpIGVtcHJlc2FJZDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogSUQgZGEgZmlsaWFsIHVzYWRvIHBlbGEgQVBJIGRlIHN1Z2VzdMOjbyBkZSByYXRlaW8uXG4gICAgICogUXVhbmRvIGluZm9ybWFkbywgdGVtIHByaW9yaWRhZGUgc29icmUgbyBJRCBkZXJpdmFkbyBkbyBjb250ZXh0by5cbiAgICAgKi9cbiAgICBASW5wdXQoKSBmaWxpYWxJZDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQ3JpdMOpcmlvIGRlIHJhdGVpbyBwYWRyw6NvIHVzYWRvIHBlbGEgQVBJIGRlIHN1Z2VzdMOjby5cbiAgICAgKiBEZWZhdWx0OiAnVjMnIChEZXNwZXNhcyDigJQgQ29udGEgWCBDLiBDdXN0b3MpLlxuICAgICAqL1xuICAgIEBJbnB1dCgpIGNyaVJhdDogQ3JpdGVyaW9SYXRlaW8gPSAnVjMnO1xuXG4gICAgLyoqXG4gICAgICogSUQgZGEgY29udGEgZmluYW5jZWlyYSAoZTA5MXBsZikgcGFyYSBmaWx0cmFyIGEgc3VnZXN0w6NvIGRlIHJhdGVpby5cbiAgICAgKiBRdWFuZG8gaW5mb3JtYWRvLCDDqSBlbnZpYWRvIGNvbW8gcGFyw6JtZXRybyBuYSBBUEkgc3VnZXJpclJhdGVpby5cbiAgICAgKi9cbiAgICBASW5wdXQoKSBlMDkxcGxmSWQ6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIElEIGRvIGNlbnRybyBkZSBjdXN0byAoZTA0NGNjdSkgcGFyYSBmaWx0cmFyIGEgc3VnZXN0w6NvIGRlIHJhdGVpby5cbiAgICAgKiBRdWFuZG8gaW5mb3JtYWRvLCDDqSBlbnZpYWRvIGNvbW8gcGFyw6JtZXRybyBuYSBBUEkgc3VnZXJpclJhdGVpby5cbiAgICAgKi9cbiAgICBASW5wdXQoKSBlMDQ0Y2N1SWQ6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIElEIGRhIHRyYW5zYcOnw6NvIHVzYWRhIHBhcmEgZmlsdHJhciBhIHN1Z2VzdMOjbyBkZSByYXRlaW8uXG4gICAgICovXG4gICAgQElucHV0KCkgaWRUcmFuc2FjYW86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIElEIGRhIGZhbcOtbGlhIHVzYWRhIHBhcmEgZmlsdHJhciBhIHN1Z2VzdMOjbyBkZSByYXRlaW8uXG4gICAgICovXG4gICAgQElucHV0KCkgaWRGYW1pbGlhOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBJRCBkYSBkZXJpdmHDp8OjbyB1c2FkYSBwYXJhIGZpbHRyYXIgYSBzdWdlc3TDo28gZGUgcmF0ZWlvLlxuICAgICAqL1xuICAgIEBJbnB1dCgpIGlkRGVyaXZhY2FvOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBJRCBkbyBzZXJ2acOnbyB1c2FkbyBwYXJhIGZpbHRyYXIgYSBzdWdlc3TDo28gZGUgcmF0ZWlvLlxuICAgICAqL1xuICAgIEBJbnB1dCgpIGlkU2Vydmljbzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogVmFsb3IgZXhjZWRlbnRlIGluZm9ybWFkbyBwYXJhIGEgc3VnZXN0w6NvIGRlIHJhdGVpby5cbiAgICAgKiBRdWFuZG8gaW5mb3JtYWRvLCDDqSBlbnZpYWRvIGNvbW8gcGFyw6JtZXRybyBuYSBBUEkgc3VnZXJpclJhdGVpby5cbiAgICAgKi9cbiAgICBASW5wdXQoKSB2YWxvckV4Y2VkZW50ZTogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogQ8OzZGlnbyBJU08gZGEgbW9lZGEgcGFyYSBmb3JtYXRhw6fDo28gZGUgdmFsb3JlcyBuYSBncmlkIChleDogJ0JSTCcsICdVU0QnKS5cbiAgICAgKiBTZSBuw6NvIGluZm9ybWFkbywgdXNhIGVzdGlsbyBkZWNpbWFsIHNlbSBzw61tYm9sby5cbiAgICAgKi9cbiAgICBASW5wdXQoKSBjdXJyZW5jeUNvZGU6IHN0cmluZztcblxuICAgIC8vID09PSBPVVRQVVRTID09PVxuICAgIEBPdXRwdXQoKSBzYXZlID0gbmV3IEV2ZW50RW1pdHRlcjxSYXRlaW9TYXZlRXZlbnQ+KCk7XG4gICAgQE91dHB1dCgpIGNhbmNlbCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgICBAT3V0cHV0KCkgY2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxSYXRlaW9DaGFuZ2VFdmVudD4oKTtcbiAgICBAT3V0cHV0KCkgZXJyb3IgPSBuZXcgRXZlbnRFbWl0dGVyPFJhdGVpb0Vycm9yRXZlbnQ+KCk7XG5cbiAgICAvLyA9PT0gUkVGRVLDik5DSUFTIERPIFRFTVBMQVRFID09PVxuICAgIEBWaWV3Q2hpbGQoJ3RhYmxlUmF0ZWlvJykgcmVhZG9ubHkgdGFibGU6IFRhYmxlO1xuXG4gICAgLy8gPT09IENPTlNUQU5URVMgRVhQT1NUQVMgQU8gVEVNUExBVEUgPT09XG4gICAgcmVhZG9ubHkgQnV0dG9uUHJpb3JpdHkgPSBCdXR0b25Qcmlvcml0eTtcbiAgICByZWFkb25seSBCdXR0b25TaXplID0gQnV0dG9uU2l6ZTtcblxuICAgIC8vID09PSBFU1RBRE8gPT09XG4gICAgcHVibGljIGZvcm1Hcm91cDogRm9ybUdyb3VwO1xuICAgIHB1YmxpYyBsb2FkaW5nID0gZmFsc2U7XG4gICAgcHVibGljIGxvYWRlZENvbnRleHQ6IFJldG9ybmFyUmF0ZWlvT3V0cHV0O1xuICAgIHB1YmxpYyBzZWxlY3Rpb246IGFueVtdID0gW107XG4gICAgLyoqIFNlbGXDp8OjbyBkZSBjZW50cm9zIGRlIGN1c3RvIHBvciBjb250YSBmaW5hbmNlaXJhIChrZXllZCBwb3IgaWRDb250YUZpbmFuY2VpcmEpLiAqL1xuICAgIHB1YmxpYyBjY1NlbGVjdGlvbjogeyBbaWRDb250YUZpbmFuY2VpcmE6IHN0cmluZ106IFJhdGVpb0NDdXN0b1tdIH0gPSB7fTtcbiAgICBwdWJsaWMgZ3JpZENvbHVtbnM6IGFueVtdO1xuICAgIHB1YmxpYyBjb250YXNEYXRhU291cmNlOiBSYXRlaW9Db250YVtdID0gW107XG4gICAgcHVibGljIGVkaXRpbmdSb3dCYWNrdXA6IFJhdGVpb0NvbnRhIHwgbnVsbCA9IG51bGw7XG4gICAgcHVibGljIGVkaXRpbmdDQ0JhY2t1cDogUmF0ZWlvQ0N1c3RvIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvKiogw5psdGltbyB2YWxvciBzZWxlY2lvbmFkbyBubyBsb29rdXAgZGUgY29udGEgKGNhcnJlZ2EgYW5hU2luIHBhcmEgdmFsaWRhw6fDo28pLiAqL1xuICAgIHB1YmxpYyBzZWxlY3RlZENvbnRhOiBDb250YUZpbmFuY2VpcmFMb29rdXAgfCBudWxsID0gbnVsbDtcbiAgICAvKiogw5psdGltbyB2YWxvciBzZWxlY2lvbmFkbyBubyBsb29rdXAgZGUgY2VudHJvIGRlIGN1c3RvIChjYXJyZWdhIGFuYVNpbi9hY2VSYXQpLiAqL1xuICAgIHB1YmxpYyBzZWxlY3RlZENDOiBDZW50cm9DdXN0b0xvb2t1cCB8IG51bGwgPSBudWxsO1xuXG4gICAgLy8gPT09IE1PREFMIENPTlRBIEZJTkFOQ0VJUkEgPT09XG4gICAgcHVibGljIGRpc3BsYXlDb250YURpYWxvZyA9IGZhbHNlO1xuICAgIHB1YmxpYyBjb250YURpYWxvZ0Zvcm1Hcm91cDogRm9ybUdyb3VwO1xuICAgIHB1YmxpYyBjb250YURpYWxvZ0ZpZWxkczogRm9ybUZpZWxkW107XG4gICAgcHVibGljIGVkaXRpbmdDb250YUluZGV4OiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAgIC8vID09PSBNT0RBTCBDRU5UUk8gREUgQ1VTVE8gPT09XG4gICAgcHVibGljIGRpc3BsYXlDQ0RpYWxvZyA9IGZhbHNlO1xuICAgIHB1YmxpYyBjY0RpYWxvZ0Zvcm1Hcm91cDogRm9ybUdyb3VwO1xuICAgIHB1YmxpYyBjY0RpYWxvZ0ZpZWxkczogRm9ybUZpZWxkW107XG4gICAgcHVibGljIGVkaXRpbmdDQ0NvbnRhSW5kZXg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICAgIHB1YmxpYyBlZGl0aW5nQ0NJbmRleDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IG5nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgcHVibGljIGdldCBlZmZlY3RpdmVSZWFkT25seSgpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgaWM6IEludGVncmFjYW9Db250cm9sYWRvcmlhIHwgdW5kZWZpbmVkID0gdGhpcy5sb2FkZWRDb250ZXh0Py5pbnRlZ3JhY2FvQ29udHJvbGFkb3JpYTtcbiAgICAgICAgY29uc3QgaGFzSW50ZWdyYWNhbyA9ICEhaWMgJiYgKFxuICAgICAgICAgICAgaWMuY29udGFiaWxpZGFkZSA9PT0gdHJ1ZSB8fFxuICAgICAgICAgICAgaWMudHJpYnV0b3MgPT09IHRydWUgfHxcbiAgICAgICAgICAgIGljLnBhdHJpbW9uaW8gPT09IHRydWVcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVhZE9ubHkgfHwgaGFzSW50ZWdyYWNhbztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGNvbnRhc0Zvcm1BcnJheSgpOiBGb3JtQXJyYXkge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtR3JvdXAuZ2V0KCdjb250YXMnKSBhcyBGb3JtQXJyYXk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW5kaWNhIHNlIG8gY3JpdMOpcmlvIGRlIHJhdGVpbyBleGlnZSBkaXN0cmlidWnDp8OjbyBwb3IgY2VudHJvIGRlIGN1c3RvLlxuICAgICAqIE8gY3JpdMOpcmlvICdWNScgKE5lbmh1bSkgbsOjbyBkaXN0cmlidWkgcG9yIEMuIEN1c3Rvczsgb3MgZGVtYWlzIGV4aWdlbVxuICAgICAqIGFvIG1lbm9zIHVtIGNlbnRybyBkZSBjdXN0byBwb3IgY29udGEgZmluYW5jZWlyYS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHJlcXVpcmVzQ2VudHJvQ3VzdG8oKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGNyaXRlcmlvID0gdGhpcy5sb2FkZWRDb250ZXh0Py5jcmlSYXQgPz8gdGhpcy5jcmlSYXQ7XG4gICAgICAgIHJldHVybiBjcml0ZXJpbyAhPT0gRXJwUmF0ZWlvRWRpdG9yQ29tcG9uZW50LkNSSVRFUklPX1NFTV9DRU5UUk9fQ1VTVE87XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB2YWxvckJhc2UoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9hZGVkQ29udGV4dD8udmFsb3JCYXNlID8/IDA7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBwZXJjZW50dWFsUmVzdGFudGUoKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3Qgc29tYSA9IHRoaXMuY29udGFzRGF0YVNvdXJjZS5yZWR1Y2UoXG4gICAgICAgICAgICAoYWNjLCBjb250YSkgPT4gYWNjICsgKGNvbnRhLnBlcmNlbnR1YWwgfHwgMCksIDBcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuICsoMTAwIC0gc29tYSkudG9GaXhlZCh0aGlzLmNvbmZpZy5wZXJjZW50YWdlU2NhbGUgPz8gNCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB2YWxvclJlc3RhbnRlKCk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IHNvbWEgPSB0aGlzLmNvbnRhc0RhdGFTb3VyY2UucmVkdWNlKFxuICAgICAgICAgICAgKGFjYywgY29udGEpID0+IGFjYyArIChjb250YS52YWxvclJhdGVhZG9Db250YSB8fCAwKSwgMFxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gKyh0aGlzLnZhbG9yQmFzZSAtIHNvbWEpLnRvRml4ZWQodGhpcy5jb25maWcuY3VycmVuY3lTY2FsZSA/PyAyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBWYWxvciByZXN0YW50ZSBhIHNlciBleGliaWRvIG5vcyBjYXJkcyBkZSByZXN1bW8uXG4gICAgICogUXVhbmRvIG8gY3JpdMOpcmlvIGV4aWdlIGNlbnRybyBkZSBjdXN0bywgY29uc2lkZXJhIG8gdG90YWwgasOhIGRpc3RyaWJ1w61kb1xuICAgICAqIG5vcyBDQ3MgZGUgdG9kYXMgYXMgY29udGFzIGVtIHZleiBkbyB0b3RhbCBkYXMgY29udGFzIGZpbmFuY2VpcmFzLlxuICAgICAqIEFzc2ltIG8gY2FyZCByZWZsZXRlIGEgZGlzdHJpYnVpw6fDo28gcmVhbCBwb250YS1hLXBvbnRhLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgdmFsb3JSZXN0YW50ZURpc3BsYXkoKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKCF0aGlzLnJlcXVpcmVzQ2VudHJvQ3VzdG8pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbG9yUmVzdGFudGU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdG90YWxDQyA9IHRoaXMuY29udGFzRGF0YVNvdXJjZS5yZWR1Y2UoXG4gICAgICAgICAgICAoYWNjLCBjb250YSkgPT4gYWNjICsgKGNvbnRhLnJhdGVpb3NDQ3VzdG8gfHwgW10pLnJlZHVjZShcbiAgICAgICAgICAgICAgICAoY2NBY2MsIGNjKSA9PiBjY0FjYyArIChjYy52YWxvciB8fCAwKSwgMFxuICAgICAgICAgICAgKSwgMFxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gKyh0aGlzLnZhbG9yQmFzZSAtIHRvdGFsQ0MpLnRvRml4ZWQodGhpcy5jb25maWcuY3VycmVuY3lTY2FsZSA/PyAyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQZXJjZW50dWFsIHJlc3RhbnRlIGEgc2VyIGV4aWJpZG8gbm9zIGNhcmRzIGRlIHJlc3Vtby5cbiAgICAgKiBEZXJpdmFkbyBkZSBgdmFsb3JSZXN0YW50ZURpc3BsYXlgIHBhcmEgbWFudGVyIGNvbnNpc3TDqm5jaWEgY29tIG8gdmFsb3IuXG4gICAgICovXG4gICAgcHVibGljIGdldCBwZXJjZW50dWFsUmVzdGFudGVEaXNwbGF5KCk6IG51bWJlciB7XG4gICAgICAgIGlmICghdGhpcy5yZXF1aXJlc0NlbnRyb0N1c3RvKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wZXJjZW50dWFsUmVzdGFudGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLnZhbG9yQmFzZSkge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICsodGhpcy52YWxvclJlc3RhbnRlRGlzcGxheSAvIHRoaXMudmFsb3JCYXNlICogMTAwKS50b0ZpeGVkKHRoaXMuY29uZmlnLnBlcmNlbnRhZ2VTY2FsZSA/PyA0KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG51bWJlckZvcm1hdE9wdGlvbnMoKTogYW55IHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVuY3lDb2RlKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIG51bWJlckZvcm1hdE9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU6ICdjdXJyZW5jeScsXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbmN5OiB0aGlzLmN1cnJlbmN5Q29kZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG51bWJlckZvcm1hdE9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgICBzdHlsZTogJ2RlY2ltYWwnLFxuICAgICAgICAgICAgICAgIG1pbmltdW1GcmFjdGlvbkRpZ2l0czogdGhpcy5jb25maWcuY3VycmVuY3lTY2FsZSA/PyAyLFxuICAgICAgICAgICAgICAgIG1heGltdW1GcmFjdGlvbkRpZ2l0czogdGhpcy5jb25maWcuY3VycmVuY3lTY2FsZSA/PyAyXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgZmI6IEZvcm1CdWlsZGVyLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHNlcnZpY2U6IEVycFJhdGVpb0VkaXRvclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGUwOTFQbGZMb29rdXA6IEUwOTFQbGZMb29rdXAsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgZTA0NENjdUxvb2t1cDogRTA0NENjdUxvb2t1cCxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBtZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAgPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgICAgICAgIGNvbnRhczogdGhpcy5mYi5hcnJheShbXSlcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbW92aW1lbnRvQ2hhbmdlZCA9IGNoYW5nZXMuaWRNb3ZpbWVudG8gfHwgY2hhbmdlcy50aXBvTW92aW1lbnRvO1xuXG4gICAgICAgIGlmIChtb3ZpbWVudG9DaGFuZ2VkICYmIHRoaXMuaWRNb3ZpbWVudG8gJiYgdGhpcy50aXBvTW92aW1lbnRvICYmIHRoaXMubG9hZEZyb21BcGkpIHtcbiAgICAgICAgICAgIC8vIE1vZG8gY29uZWN0YWRvIGNvbSBjYXJnYSB2aWEgQVBJXG4gICAgICAgICAgICB0aGlzLmNhcnJlZ2FyUmF0ZWlvKCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc0lucHV0RHJpdmVuICYmIChjaGFuZ2VzLmluaXRpYWxDb250ZXh0IHx8IGNoYW5nZXMuaW5pdGlhbFJhdGVpb3MgfHwgY2hhbmdlcy5sb2FkRnJvbUFwaSB8fCBtb3ZpbWVudG9DaGFuZ2VkKSkge1xuICAgICAgICAgICAgLy8gQWxpbWVudGFkbyBwb3IgaW5wdXRzOiBtb2RvIHN0YW5kYWxvbmUgT1UgY29uZWN0YWRvIHNlbSBjYXJnYSB2aWEgQVBJXG4gICAgICAgICAgICB0aGlzLmluaWNpYWxpemFyUG9ySW5wdXRzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogUmV0b3JuYSBvIGNvbnRlw7pkbyBhdHVhbCBkYSBncmlkICh1c28gc3RhbmRhbG9uZSDigJQgcXVlbSBjb25zb21lIGzDqiBvcyByYXRlaW9zIGRhcXVpKS4gKi9cbiAgICBwdWJsaWMgZ2V0IHJhdGVpb3MoKTogUmF0ZWlvQ29udGFbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRhc0RhdGFTb3VyY2U7XG4gICAgfVxuXG4gICAgLyoqIEluZGljYSBzZSBvIGNvbXBvbmVudGUgZXN0w6Egb3BlcmFuZG8gc2VtIGlkTW92aW1lbnRvIChtb2RvIHN0YW5kYWxvbmUpLiAqL1xuICAgIHB1YmxpYyBnZXQgaXNTdGFuZGFsb25lKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIXRoaXMuaWRNb3ZpbWVudG87XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW5kaWNhIHNlIG8gY29tcG9uZW50ZSDDqSBhbGltZW50YWRvIHBvciBpbnB1dHMgZW0gdmV6IGRhIEFQSTpcbiAgICAgKiBtb2RvIHN0YW5kYWxvbmUgKHNlbSBpZE1vdmltZW50bykgT1UgbW9kbyBjb25lY3RhZG8gY29tIGxvYWRGcm9tQXBpID0gZmFsc2UuXG4gICAgICovXG4gICAgcHVibGljIGdldCBpc0lucHV0RHJpdmVuKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1N0YW5kYWxvbmUgfHwgIXRoaXMubG9hZEZyb21BcGk7XG4gICAgfVxuXG4gICAgLyoqIEluZGljYSBzZSBvIGNvbXBvbmVudGUgZXN0w6EgcHJvbnRvIHBhcmEgZXhpYmlyIFVJIChjYXJyZWdvdSB2aWEgQVBJIE9VIGZvaSBpbmljaWFsaXphZG8gcG9yIGlucHV0cykuICovXG4gICAgcHVibGljIGdldCBpc1JlYWR5KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLmxvYWRlZENvbnRleHQgfHwgdGhpcy5pc0lucHV0RHJpdmVuO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKTtcbiAgICAgICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgLy8gPT09IEHDh8OVRVMgUMOaQkxJQ0FTID09PVxuXG4gICAgcHVibGljIG9uU2FsdmFyKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5lZmZlY3RpdmVSZWFkT25seSkgeyByZXR1cm47IH1cblxuICAgICAgICBpZiAodGhpcy5yZXF1aXJlc0NlbnRyb0N1c3RvICYmIHRoaXMuaGFzQ29udGFTZW1DZW50cm9DdXN0bygpKSB7XG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZXJweC5yYXRlaW9fZWRpdG9yLmVycm9fY2VudHJvX2N1c3RvX29icmlnYXRvcmlvJyk7XG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7XG4gICAgICAgICAgICAgICAgc2V2ZXJpdHk6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgc3VtbWFyeTogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZXJweC5yYXRlaW9fZWRpdG9yLmVycm9fdGl0dWxvJyksXG4gICAgICAgICAgICAgICAgZGV0YWlsOiBtZXNzYWdlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuZXJyb3IuZW1pdCh7IG9wZXJhY2FvOiAnc2F2ZScsIG1lc3NhZ2UgfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuaXNEaXN0cmlidWljYW9Db21wbGV0YSgpKSB7XG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZXJweC5yYXRlaW9fZWRpdG9yLmVycm9fZGlzdHJpYnVpY2FvX2luY29tcGxldGEnKTtcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHtcbiAgICAgICAgICAgICAgICBzZXZlcml0eTogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICBzdW1tYXJ5OiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlcnB4LnJhdGVpb19lZGl0b3IuZXJyb190aXR1bG8nKSxcbiAgICAgICAgICAgICAgICBkZXRhaWw6IG1lc3NhZ2VcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5lcnJvci5lbWl0KHsgb3BlcmFjYW86ICdzYXZlJywgbWVzc2FnZSB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGN0eCA9IHRoaXMubG9hZGVkQ29udGV4dDtcbiAgICAgICAgaWYgKCFjdHg/LmUwNzBmaWw/LmlkIHx8ICFjdHg/LmNyaVJhdCkge1xuICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VycHgucmF0ZWlvX2VkaXRvci5lcnJvX2NvbnRleHRvX2luY29tcGxldG8nKTtcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHtcbiAgICAgICAgICAgICAgICBzZXZlcml0eTogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICBzdW1tYXJ5OiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlcnB4LnJhdGVpb19lZGl0b3IuZXJyb190aXR1bG8nKSxcbiAgICAgICAgICAgICAgICBkZXRhaWw6IG1lc3NhZ2VcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5lcnJvci5lbWl0KHsgb3BlcmFjYW86ICdzYXZlJywgbWVzc2FnZSB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlucHV0OiBHcmF2YXJSYXRlaW9NYW51YWxJbnB1dCA9IHtcbiAgICAgICAgICAgIGlkTW92aW1lbnRvOiB0aGlzLmlkTW92aW1lbnRvLFxuICAgICAgICAgICAgdGlwb01vdmltZW50bzogdGhpcy50aXBvTW92aW1lbnRvLFxuICAgICAgICAgICAgYWdydXBhZG9ySWQ6IGN0eC5hZ3J1cGFkb3JJZCxcbiAgICAgICAgICAgIGUwNzBmaWxfaWQ6IGN0eC5lMDcwZmlsLmlkLFxuICAgICAgICAgICAgY3JpdGVyaW9SYXRlaW86IGN0eC5jcmlSYXQsXG4gICAgICAgICAgICBkYXRhQmFzZTogY3R4LmRhdGFCYXNlLFxuICAgICAgICAgICAgZGF0YU1vdmltZW50bzogY3R4LmRhdGFNb3ZpbWVudG8sXG4gICAgICAgICAgICByYXRlaW9zOiB0aGlzLmNvbnRhc0RhdGFTb3VyY2VcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLnNlcnZpY2UuZ3JhdmFyUmF0ZWlvTWFudWFsKGlucHV0KVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksIGZpbmFsaXplKCgpID0+ICh0aGlzLmxvYWRpbmcgPSBmYWxzZSkpKVxuICAgICAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldmVyaXR5OiAnc3VjY2VzcycsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdW1tYXJ5OiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlcnB4LnJhdGVpb19lZGl0b3Iuc2Fsdm9fY29tX3N1Y2Vzc29fdGl0dWxvJyksXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VycHgucmF0ZWlvX2VkaXRvci5zYWx2b19jb21fc3VjZXNzb19kZXRhbGhlJylcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2F2ZS5lbWl0KHsgaWRNb3ZpbWVudG86IHRoaXMuaWRNb3ZpbWVudG8sIHRpcG9Nb3ZpbWVudG86IHRoaXMudGlwb01vdmltZW50bywgcmF0ZWlvczogdGhpcy5jb250YXNEYXRhU291cmNlIH0pO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgKGVycikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkZXRhaWwgPSBlcnI/LmVycm9yPy5tZXNzYWdlIHx8IGVycj8ubWVzc2FnZSB8fCB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlcnB4LnJhdGVpb19lZGl0b3IuZXJyb19zYWx2YXInKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V2ZXJpdHk6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdW1tYXJ5OiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlcnB4LnJhdGVpb19lZGl0b3IuZXJyb190aXR1bG8nKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvci5lbWl0KHsgb3BlcmFjYW86ICdzYXZlJywgbWVzc2FnZTogZGV0YWlsLCBvcmlnaW5hbEVycm9yOiBlcnIgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25TdWdlcmlyKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5lZmZlY3RpdmVSZWFkT25seSB8fCAhdGhpcy5zaG93U3VnZXN0YW9CdXR0b24pIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5sb2FkZWRDb250ZXh0O1xuICAgICAgICBjb25zdCBlMDcwZmlsX2lkID0gdGhpcy5maWxpYWxJZCB8fCBjdHg/LmUwNzBmaWw/LmlkO1xuICAgICAgICBjb25zdCBjcml0ZXJpbyA9IHRoaXMuY3JpUmF0IHx8IGN0eD8uY3JpUmF0O1xuICAgICAgICBjb25zdCB2YWxvckJhc2UgPSBjdHg/LnZhbG9yQmFzZSA/PyAwO1xuXG4gICAgICAgIGlmICghZTA3MGZpbF9pZCB8fCAhY3JpdGVyaW8pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBhcmFtZXRybzogU3VnZXJpclJhdGVpb1BhcmFtZXRybyA9IHtcbiAgICAgICAgICAgIGUwNzBmaWxfaWQsXG4gICAgICAgICAgICB2YWxvckJhc2UsXG4gICAgICAgICAgICBjcmlSYXQ6IGNyaXRlcmlvLFxuICAgICAgICAgICAgZGF0YUJhc2U6IGN0eD8uZGF0YUJhc2UsXG4gICAgICAgICAgICBkYXRhTW92aW1lbnRvOiBjdHg/LmRhdGFNb3ZpbWVudG9cbiAgICAgICAgfTtcblxuICAgICAgICBpZiAodGhpcy5pZE1vdmltZW50bykge1xuICAgICAgICAgICAgcGFyYW1ldHJvLmlkTW92aW1lbnRvID0gdGhpcy5pZE1vdmltZW50bztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5lMDkxcGxmSWQpIHtcbiAgICAgICAgICAgIHBhcmFtZXRyby5lMDkxcGxmX2lkID0gdGhpcy5lMDkxcGxmSWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZTA0NGNjdUlkKSB7XG4gICAgICAgICAgICBwYXJhbWV0cm8uZTA0NGNjdV9pZCA9IHRoaXMuZTA0NGNjdUlkO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlkVHJhbnNhY2FvKSB7XG4gICAgICAgICAgICBwYXJhbWV0cm8uaWRUcmFuc2FjYW8gPSB0aGlzLmlkVHJhbnNhY2FvO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlkRmFtaWxpYSkge1xuICAgICAgICAgICAgcGFyYW1ldHJvLmlkRmFtaWxpYSA9IHRoaXMuaWRGYW1pbGlhO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlkRGVyaXZhY2FvKSB7XG4gICAgICAgICAgICBwYXJhbWV0cm8uaWREZXJpdmFjYW8gPSB0aGlzLmlkRGVyaXZhY2FvO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlkU2Vydmljbykge1xuICAgICAgICAgICAgcGFyYW1ldHJvLmlkU2VydmljbyA9IHRoaXMuaWRTZXJ2aWNvO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnZhbG9yRXhjZWRlbnRlICE9IG51bGwpIHtcbiAgICAgICAgICAgIHBhcmFtZXRyby52YWxvckV4Y2VkZW50ZSA9IHRoaXMudmFsb3JFeGNlZGVudGU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpbnB1dDogU3VnZXJpclJhdGVpb0lucHV0ID0ge1xuICAgICAgICAgICAgdGlwbzogdGhpcy50aXBvTW92aW1lbnRvLFxuICAgICAgICAgICAgcGFyYW1ldHJvczogW3BhcmFtZXRyb11cbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLnNlcnZpY2Uuc3VnZXJpclJhdGVpbyhpbnB1dClcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLCBmaW5hbGl6ZSgoKSA9PiAodGhpcy5sb2FkaW5nID0gZmFsc2UpKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgICAgKHJlc3ApID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3VnZXN0YW8gPSAocmVzcC5zdWdlc3RhbyB8fCBbXSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5maW5kKHMgPT4gIXRoaXMuaWRNb3ZpbWVudG8gfHwgcy5pZE1vdmltZW50byA9PT0gdGhpcy5pZE1vdmltZW50bylcbiAgICAgICAgICAgICAgICAgICAgICAgIHx8IChyZXNwLnN1Z2VzdGFvIHx8IFtdKVswXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmF0ZWlvID0gc3VnZXN0YW8/LnJhdGVpbztcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFzdWdlc3RhbyB8fCAhcmF0ZWlvIHx8IHJhdGVpby5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBvcHVsYXJDb21SYXRlaW9zKHJhdGVpbyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdENoYW5nZSgpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgKGVycikgPT4gdGhpcy5lcnJvci5lbWl0KHsgb3BlcmFjYW86ICdzdWdnZXN0JywgbWVzc2FnZTogZXJyPy5lcnJvcj8ubWVzc2FnZSB8fCBlcnI/Lm1lc3NhZ2UgfHwgdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZXJweC5yYXRlaW9fZWRpdG9yLmVycm9fc3VnZXJpcicpLCBvcmlnaW5hbEVycm9yOiBlcnIgfSlcbiAgICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gPT09IE1PREFMIENPTlRBIEZJTkFOQ0VJUkEgPT09XG5cbiAgICBwdWJsaWMgb3BlbkNvbnRhRGlhbG9nKGVkaXRJbmRleD86IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLmVkaXRpbmdDb250YUluZGV4ID0gZWRpdEluZGV4ICE9IG51bGwgPyBlZGl0SW5kZXggOiBudWxsO1xuICAgICAgICBjb25zdCByZW1haW5pbmdQY3QgPSB0aGlzLmVkaXRpbmdDb250YUluZGV4ICE9IG51bGxcbiAgICAgICAgICAgID8gdGhpcy5wZXJjZW50dWFsUmVzdGFudGUgKyB0aGlzLmNvbnRhc0RhdGFTb3VyY2VbdGhpcy5lZGl0aW5nQ29udGFJbmRleF0ucGVyY2VudHVhbFxuICAgICAgICAgICAgOiB0aGlzLnBlcmNlbnR1YWxSZXN0YW50ZTtcbiAgICAgICAgLy8gVXNhIG8gdmFsb3IgcmVzdGFudGUgcmVhbCBlbSB2ZXogZGUgcmVjYWxjdWxhciB2aWEgcGVyY2VudHVhbCwgZXZpdGFuZG9cbiAgICAgICAgLy8gZGlmZXJlbsOnYXMgZGUgYXJyZWRvbmRhbWVudG8gYWN1bXVsYWRhcyBuYXMgZW50cmFkYXMgYW50ZXJpb3Jlcy5cbiAgICAgICAgY29uc3QgcmVtYWluaW5nVmFsb3IgPSB0aGlzLmVkaXRpbmdDb250YUluZGV4ICE9IG51bGxcbiAgICAgICAgICAgID8gKyh0aGlzLnZhbG9yUmVzdGFudGUgKyB0aGlzLmNvbnRhc0RhdGFTb3VyY2VbdGhpcy5lZGl0aW5nQ29udGFJbmRleF0udmFsb3JSYXRlYWRvQ29udGEpLnRvRml4ZWQodGhpcy5jb25maWcuY3VycmVuY3lTY2FsZSA/PyAyKVxuICAgICAgICAgICAgOiB0aGlzLnZhbG9yUmVzdGFudGU7XG5cbiAgICAgICAgbGV0IGNvbnRhVmFsdWUgPSBudWxsO1xuICAgICAgICBsZXQgcGVyY2VudHVhbFZhbHVlOiBudW1iZXIgfCBudWxsID0gcmVtYWluaW5nUGN0ID4gMCA/IHJlbWFpbmluZ1BjdCA6IG51bGw7XG4gICAgICAgIGxldCB2YWxvclZhbHVlOiBudW1iZXIgfCBudWxsID0gcGVyY2VudHVhbFZhbHVlICE9IG51bGwgPyByZW1haW5pbmdWYWxvciA6IG51bGw7XG5cbiAgICAgICAgaWYgKHRoaXMuZWRpdGluZ0NvbnRhSW5kZXggIT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgY29udGEgPSB0aGlzLmNvbnRhc0RhdGFTb3VyY2VbdGhpcy5lZGl0aW5nQ29udGFJbmRleF07XG4gICAgICAgICAgICBjb250YVZhbHVlID0geyBpZDogY29udGEuaWRDb250YUZpbmFuY2VpcmEsIGxhYmVsOiBjb250YS5jb250YUZpbmFuY2VpcmEgfTtcbiAgICAgICAgICAgIHBlcmNlbnR1YWxWYWx1ZSA9IGNvbnRhLnBlcmNlbnR1YWw7XG4gICAgICAgICAgICB2YWxvclZhbHVlID0gY29udGEudmFsb3JSYXRlYWRvQ29udGE7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNlbGVjdGVkQ29udGEgPSBjb250YVZhbHVlIGFzIENvbnRhRmluYW5jZWlyYUxvb2t1cCB8IG51bGw7XG4gICAgICAgIHRoaXMuY29udGFEaWFsb2dGb3JtR3JvdXAgPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgICAgICAgIGNvbnRhRmluYW5jZWlyYTogW3sgdmFsdWU6IGNvbnRhVmFsdWUsIGRpc2FibGVkOiB0aGlzLmVkaXRpbmdDb250YUluZGV4ICE9IG51bGwgfSwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICAgICAgICBwZXJjZW50dWFsOiBbeyB2YWx1ZTogcGVyY2VudHVhbFZhbHVlLCBkaXNhYmxlZDogZmFsc2UgfSwgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWF4KHJlbWFpbmluZ1BjdCldXSxcbiAgICAgICAgICAgIHZhbG9yOiBbeyB2YWx1ZTogdmFsb3JWYWx1ZSwgZGlzYWJsZWQ6IGZhbHNlIH0sIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1heChyZW1haW5pbmdWYWxvcildXVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jb250YURpYWxvZ0Zvcm1Hcm91cC5nZXQoJ2NvbnRhRmluYW5jZWlyYScpLnZhbHVlQ2hhbmdlc1xuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCh2YWx1ZTogQ29udGFGaW5hbmNlaXJhTG9va3VwKSA9PiAodGhpcy5zZWxlY3RlZENvbnRhID0gdmFsdWUgfHwgbnVsbCkpO1xuICAgICAgICB0aGlzLnNldHVwUGVyY2VudHVhbFZhbG9yU3luYyh0aGlzLmNvbnRhRGlhbG9nRm9ybUdyb3VwLCAoKSA9PiB0aGlzLnZhbG9yQmFzZSk7XG4gICAgICAgIHRoaXMuY29udGFEaWFsb2dGaWVsZHMgPSB0aGlzLmdldENvbnRhRGlhbG9nRmllbGRzKCk7XG4gICAgICAgIHRoaXMuZGlzcGxheUNvbnRhRGlhbG9nID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25TYXZlQ29udGFEaWFsb2coKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRhRGlhbG9nRm9ybUdyb3VwLmludmFsaWQpIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgY29uc3QgY29udGFDb250cm9sID0gdGhpcy5jb250YURpYWxvZ0Zvcm1Hcm91cC5nZXQoJ2NvbnRhRmluYW5jZWlyYScpO1xuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5jb250YURpYWxvZ0Zvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpO1xuICAgICAgICBjb25zdCBjb250YUZpbmFuY2VpcmEgPSBkYXRhLmNvbnRhRmluYW5jZWlyYTtcbiAgICAgICAgY29uc3QgcGVyY2VudHVhbCA9IE51bWJlcihkYXRhLnBlcmNlbnR1YWwpIHx8IDA7XG4gICAgICAgIGNvbnN0IHZhbG9yID0gKyhOdW1iZXIoZGF0YS52YWxvcikgfHwgMCkudG9GaXhlZCh0aGlzLmNvbmZpZy5jdXJyZW5jeVNjYWxlID8/IDIpO1xuICAgICAgICBjb25zdCBpZENvbnRhRmluYW5jZWlyYSA9IHRoaXMuc2VsZWN0ZWRDb250YT8uaWQgfHwgY29udGFGaW5hbmNlaXJhPy5pZCB8fCAnJztcblxuICAgICAgICAvLyBWYWxpZGHDp8OjbyBhbmFsw610aWNhOiBjb250YSBzaW50w6l0aWNhIG7Do28gcG9kZSBzZXIgdXNhZGEgbm8gcmF0ZWlvXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkQ29udGE/LmFuYVNpbiA9PT0gRXJwUmF0ZWlvRWRpdG9yQ29tcG9uZW50LkFOQV9TSU5fU0lOVEVUSUNPKSB7XG4gICAgICAgICAgICBjb250YUNvbnRyb2wuc2V0RXJyb3JzKHsgY29udGFTaW50ZXRpY2E6IHRydWUgfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBWYWxpZGHDp8OjbyBkZSBkdXBsaWNpZGFkZSAoYWRpw6fDo28gZSBlZGnDp8OjbywgaWdub3JhbmRvIG8gaXRlbSBlbSBlZGnDp8OjbylcbiAgICAgICAgY29uc3QgZHVwbGljYWRhID0gdGhpcy5jb250YXNEYXRhU291cmNlLnNvbWUoXG4gICAgICAgICAgICAoYywgaSkgPT4gaSAhPT0gdGhpcy5lZGl0aW5nQ29udGFJbmRleCAmJiBjLmlkQ29udGFGaW5hbmNlaXJhID09PSBpZENvbnRhRmluYW5jZWlyYVxuICAgICAgICApO1xuICAgICAgICBpZiAoZHVwbGljYWRhKSB7XG4gICAgICAgICAgICBjb250YUNvbnRyb2wuc2V0RXJyb3JzKHsgZHVwbGljYXRlOiB0cnVlIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuZWRpdGluZ0NvbnRhSW5kZXggIT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgY29udGEgPSB0aGlzLmNvbnRhc0RhdGFTb3VyY2VbdGhpcy5lZGl0aW5nQ29udGFJbmRleF07XG4gICAgICAgICAgICBjb250YS5wZXJjZW50dWFsID0gcGVyY2VudHVhbDtcbiAgICAgICAgICAgIGNvbnRhLnZhbG9yUmF0ZWFkb0NvbnRhID0gdmFsb3I7XG4gICAgICAgICAgICAvLyBSZWNhbGN1bGEgb3MgdmFsb3JlcyBkb3MgQ0NzIHByb3BvcmNpb25hbG1lbnRlIGFvIG5vdm8gdmFsb3IgZGEgY29udGEsXG4gICAgICAgICAgICAvLyBtYW50ZW5kbyBvcyBwZXJjZW50dWFpcyBpbnRhY3Rvcy5cbiAgICAgICAgICAgIGlmIChjb250YS5yYXRlaW9zQ0N1c3RvPy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW5jeVNjYWxlID0gdGhpcy5jb25maWcuY3VycmVuY3lTY2FsZSA/PyAyO1xuICAgICAgICAgICAgICAgIGNvbnRhLnJhdGVpb3NDQ3VzdG8gPSBjb250YS5yYXRlaW9zQ0N1c3RvLm1hcChjYyA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAuLi5jYyxcbiAgICAgICAgICAgICAgICAgICAgdmFsb3I6ICsoKGNjLnBlcmNlbnR1YWwgLyAxMDApICogdmFsb3IpLnRvRml4ZWQoY3VycmVuY3lTY2FsZSlcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNvbnRhc0RhdGFTb3VyY2UgPSBbLi4udGhpcy5jb250YXNEYXRhU291cmNlXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGxhYmVsQ29udGEgPSBjb250YUZpbmFuY2VpcmE/LmxhYmVsIHx8ICcnO1xuICAgICAgICAgICAgY29uc3Qgbm92YUNvbnRhOiBSYXRlaW9Db250YSA9IHtcbiAgICAgICAgICAgICAgICBpZENvbnRhRmluYW5jZWlyYSxcbiAgICAgICAgICAgICAgICBjb250YUZpbmFuY2VpcmE6IGxhYmVsQ29udGEsXG4gICAgICAgICAgICAgICAgcGVyY2VudHVhbCxcbiAgICAgICAgICAgICAgICB2YWxvclJhdGVhZG9Db250YTogdmFsb3IsXG4gICAgICAgICAgICAgICAgcmF0ZWlvc0NDdXN0bzogW11cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLmNvbnRhc0RhdGFTb3VyY2UgPSBbLi4udGhpcy5jb250YXNEYXRhU291cmNlLCBub3ZhQ29udGFdO1xuICAgICAgICAgICAgdGhpcy5jY1NlbGVjdGlvbltub3ZhQ29udGEuaWRDb250YUZpbmFuY2VpcmFdID0gW107XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmRpc3BsYXlDb250YURpYWxvZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmVtaXRDaGFuZ2UoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25IaWRlQ29udGFEaWFsb2coKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlzcGxheUNvbnRhRGlhbG9nID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gPT09IE1PREFMIENFTlRSTyBERSBDVVNUTyA9PT1cblxuICAgIHB1YmxpYyBvcGVuQ0NEaWFsb2coY29udGFJbmRleDogbnVtYmVyLCBlZGl0Q0NJbmRleD86IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLmVkaXRpbmdDQ0NvbnRhSW5kZXggPSBjb250YUluZGV4O1xuICAgICAgICB0aGlzLmVkaXRpbmdDQ0luZGV4ID0gZWRpdENDSW5kZXggIT0gbnVsbCA/IGVkaXRDQ0luZGV4IDogbnVsbDtcblxuICAgICAgICBjb25zdCBjb250YSA9IHRoaXMuY29udGFzRGF0YVNvdXJjZVtjb250YUluZGV4XTtcbiAgICAgICAgY29uc3QgY2NMaXN0ID0gY29udGEucmF0ZWlvc0NDdXN0byB8fCBbXTtcbiAgICAgICAgY29uc3QgdmFsb3JCYXNlQ0MgPSBjb250YS52YWxvclJhdGVhZG9Db250YSB8fCAwO1xuXG4gICAgICAgIC8vIENhbGN1bGEgbyByZXN0YW50ZSBleGNsdWluZG8gbyBpdGVtIGVtIGVkacOnw6NvIChwYXJhIHF1ZSBlZGnDp8OjbyBwb3NzYSBtYW50ZXIgbyBwcsOzcHJpbyB2YWxvcilcbiAgICAgICAgY29uc3Qgc29tYUNDUGN0ID0gY2NMaXN0LnJlZHVjZSgoYWNjLCBjYywgaSkgPT4gYWNjICsgKGkgPT09IHRoaXMuZWRpdGluZ0NDSW5kZXggPyAwIDogKGNjLnBlcmNlbnR1YWwgfHwgMCkpLCAwKTtcbiAgICAgICAgY29uc3Qgc29tYUNDVmFsb3IgPSBjY0xpc3QucmVkdWNlKChhY2MsIGNjLCBpKSA9PiBhY2MgKyAoaSA9PT0gdGhpcy5lZGl0aW5nQ0NJbmRleCA/IDAgOiAoY2MudmFsb3IgfHwgMCkpLCAwKTtcbiAgICAgICAgY29uc3QgcmVtYWluaW5nUGN0ID0gKygxMDAgLSBzb21hQ0NQY3QpLnRvRml4ZWQodGhpcy5jb25maWcucGVyY2VudGFnZVNjYWxlID8/IDQpO1xuICAgICAgICBjb25zdCByZW1haW5pbmdWYWxvciA9ICsodmFsb3JCYXNlQ0MgLSBzb21hQ0NWYWxvcikudG9GaXhlZCh0aGlzLmNvbmZpZy5jdXJyZW5jeVNjYWxlID8/IDIpO1xuXG4gICAgICAgIGxldCBjY1ZhbHVlID0gbnVsbDtcbiAgICAgICAgbGV0IHBlcmNlbnR1YWxWYWx1ZTogbnVtYmVyIHwgbnVsbCA9IHJlbWFpbmluZ1BjdCA+IDAgPyByZW1haW5pbmdQY3QgOiBudWxsO1xuICAgICAgICAvLyBVc2EgbyB2YWxvciByZXN0YW50ZSByZWFsIChqw6EgY2FsY3VsYWRvIGFjaW1hKSBlbSB2ZXogZGUgcmVjYWxjdWxhciB2aWEgcGVyY2VudHVhbCxcbiAgICAgICAgLy8gZXZpdGFuZG8gZGlmZXJlbsOnYXMgZGUgYXJyZWRvbmRhbWVudG8gYWN1bXVsYWRhcyBub3MgQ0NzIGFudGVyaW9yZXMuXG4gICAgICAgIGxldCB2YWxvclZhbHVlOiBudW1iZXIgfCBudWxsID0gcGVyY2VudHVhbFZhbHVlICE9IG51bGwgPyByZW1haW5pbmdWYWxvciA6IG51bGw7XG5cbiAgICAgICAgaWYgKHRoaXMuZWRpdGluZ0NDSW5kZXggIT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgY2MgPSBjY0xpc3RbdGhpcy5lZGl0aW5nQ0NJbmRleF07XG4gICAgICAgICAgICBjY1ZhbHVlID0geyBpZDogY2MuaWRDZW50cm9DdXN0bywgbGFiZWw6IGNjLmRlc2NDQ3VzdG8gfHwgY2MuaWRDZW50cm9DdXN0byB9O1xuICAgICAgICAgICAgcGVyY2VudHVhbFZhbHVlID0gY2MucGVyY2VudHVhbDtcbiAgICAgICAgICAgIHZhbG9yVmFsdWUgPSBjYy52YWxvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG1heFBjdDogcGVyY2VudHVhbCBtw6F4aW1vIHF1ZSBlc3RlIENDIHBvZGUgdGVyIChuw6NvIHBvZGUgdWx0cmFwYXNzYXIgbyByZXN0YW50ZSBkYSBjb250YSlcbiAgICAgICAgY29uc3QgbWF4UGN0ID0gcmVtYWluaW5nUGN0O1xuICAgICAgICAvLyBtYXhWYWxvcjogdmFsb3IgbcOheGltbyBxdWUgZXN0ZSBDQyBwb2RlIHRlciAobsOjbyBwb2RlIHVsdHJhcGFzc2FyIG8gcmVzdGFudGUgZW0gZGluaGVpcm8pXG4gICAgICAgIGNvbnN0IG1heFZhbG9yID0gcmVtYWluaW5nVmFsb3I7XG5cbiAgICAgICAgdGhpcy5zZWxlY3RlZENDID0gY2NWYWx1ZSBhcyBDZW50cm9DdXN0b0xvb2t1cCB8IG51bGw7XG4gICAgICAgIHRoaXMuY2NEaWFsb2dGb3JtR3JvdXAgPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgICAgICAgIGNlbnRyb0N1c3RvOiBbeyB2YWx1ZTogY2NWYWx1ZSwgZGlzYWJsZWQ6IHRoaXMuZWRpdGluZ0NDSW5kZXggIT0gbnVsbCB9LCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgICAgICAgIHBlcmNlbnR1YWw6IFt7IHZhbHVlOiBwZXJjZW50dWFsVmFsdWUsIGRpc2FibGVkOiBmYWxzZSB9LCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5tYXgobWF4UGN0KV1dLFxuICAgICAgICAgICAgdmFsb3I6IFt7IHZhbHVlOiB2YWxvclZhbHVlLCBkaXNhYmxlZDogZmFsc2UgfSwgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWF4KG1heFZhbG9yKV1dXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNjRGlhbG9nRm9ybUdyb3VwLmdldCgnY2VudHJvQ3VzdG8nKS52YWx1ZUNoYW5nZXNcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgodmFsdWU6IENlbnRyb0N1c3RvTG9va3VwKSA9PiAodGhpcy5zZWxlY3RlZENDID0gdmFsdWUgfHwgbnVsbCkpO1xuICAgICAgICB0aGlzLnNldHVwUGVyY2VudHVhbFZhbG9yU3luYyh0aGlzLmNjRGlhbG9nRm9ybUdyb3VwLCAoKSA9PiB2YWxvckJhc2VDQyk7XG4gICAgICAgIHRoaXMuY2NEaWFsb2dGaWVsZHMgPSB0aGlzLmdldENDRGlhbG9nRmllbGRzKCk7XG4gICAgICAgIHRoaXMuZGlzcGxheUNDRGlhbG9nID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25TYXZlQ0NEaWFsb2coKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmNjRGlhbG9nRm9ybUdyb3VwLmludmFsaWQpIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgY29uc3QgY2NDb250cm9sID0gdGhpcy5jY0RpYWxvZ0Zvcm1Hcm91cC5nZXQoJ2NlbnRyb0N1c3RvJyk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmNjRGlhbG9nRm9ybUdyb3VwLmdldFJhd1ZhbHVlKCk7XG4gICAgICAgIGNvbnN0IGNlbnRyb0N1c3RvID0gZGF0YS5jZW50cm9DdXN0bztcbiAgICAgICAgY29uc3QgcGVyY2VudHVhbCA9IE51bWJlcihkYXRhLnBlcmNlbnR1YWwpIHx8IDA7XG4gICAgICAgIGNvbnN0IHZhbG9yID0gKyhOdW1iZXIoZGF0YS52YWxvcikgfHwgMCkudG9GaXhlZCh0aGlzLmNvbmZpZy5jdXJyZW5jeVNjYWxlID8/IDIpO1xuICAgICAgICBjb25zdCBjb250YSA9IHRoaXMuY29udGFzRGF0YVNvdXJjZVt0aGlzLmVkaXRpbmdDQ0NvbnRhSW5kZXhdO1xuICAgICAgICBjb25zdCBpZENlbnRyb0N1c3RvID0gdGhpcy5zZWxlY3RlZENDPy5pZCB8fCBjZW50cm9DdXN0bz8uaWQgfHwgJyc7XG5cbiAgICAgICAgLy8gVmFsaWRhw6fDo28gYW5hbMOtdGljYTogQ0Mgc2ludMOpdGljbyBvdSBxdWUgbsOjbyBhY2VpdGEgcmF0ZWlvIMOpIGludsOhbGlkb1xuICAgICAgICBjb25zdCBjY0ludmFsaWRvID0gdGhpcy5zZWxlY3RlZENDPy5hY2VSYXQgPT09IGZhbHNlXG4gICAgICAgICAgICB8fCB0aGlzLnNlbGVjdGVkQ0M/LmFuYVNpbiA9PT0gRXJwUmF0ZWlvRWRpdG9yQ29tcG9uZW50LkFOQV9TSU5fU0lOVEVUSUNPO1xuICAgICAgICBpZiAoY2NJbnZhbGlkbykge1xuICAgICAgICAgICAgY2NDb250cm9sLnNldEVycm9ycyh7IGNlbnRyb0N1c3RvSW52YWxpZG86IHRydWUgfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBWYWxpZGHDp8OjbyBkZSBkdXBsaWNpZGFkZSBuYSBtZXNtYSBjb250YSAoYWRpw6fDo28gZSBlZGnDp8OjbywgaWdub3JhbmRvIG8gaXRlbSBlbSBlZGnDp8OjbylcbiAgICAgICAgY29uc3QgY2NMaXN0ID0gY29udGEucmF0ZWlvc0NDdXN0byB8fCBbXTtcbiAgICAgICAgY29uc3QgZHVwbGljYWRvID0gY2NMaXN0LnNvbWUoXG4gICAgICAgICAgICAoY2MsIGkpID0+IGkgIT09IHRoaXMuZWRpdGluZ0NDSW5kZXggJiYgY2MuaWRDZW50cm9DdXN0byA9PT0gaWRDZW50cm9DdXN0b1xuICAgICAgICApO1xuICAgICAgICBpZiAoZHVwbGljYWRvKSB7XG4gICAgICAgICAgICBjY0NvbnRyb2wuc2V0RXJyb3JzKHsgZHVwbGljYXRlOiB0cnVlIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuZWRpdGluZ0NDSW5kZXggIT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgY2MgPSBjb250YS5yYXRlaW9zQ0N1c3RvW3RoaXMuZWRpdGluZ0NDSW5kZXhdO1xuICAgICAgICAgICAgY2MucGVyY2VudHVhbCA9IHBlcmNlbnR1YWw7XG4gICAgICAgICAgICBjYy52YWxvciA9IHZhbG9yO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgbGFiZWxDQ3VzdG8gPSBjZW50cm9DdXN0bz8ubGFiZWwgfHwgJyc7XG4gICAgICAgICAgICBjb250YS5yYXRlaW9zQ0N1c3RvID0gWy4uLmNjTGlzdCwgeyBpZENlbnRyb0N1c3RvLCBkZXNjQ0N1c3RvOiBsYWJlbENDdXN0bywgcGVyY2VudHVhbCwgdmFsb3IgfV07XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbnRhc0RhdGFTb3VyY2UgPSBbLi4udGhpcy5jb250YXNEYXRhU291cmNlXTtcbiAgICAgICAgdGhpcy5kaXNwbGF5Q0NEaWFsb2cgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5lbWl0Q2hhbmdlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uSGlkZUNDRGlhbG9nKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRpc3BsYXlDQ0RpYWxvZyA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vID09PSBBw4fDlUVTIERBIFRBQkVMQSA9PT1cblxuICAgIHB1YmxpYyBvbkRlbGV0ZVNlbGVjdGVkKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0aW9uLmxlbmd0aCkgeyByZXR1cm47IH1cbiAgICAgICAgY29uc3QgaWRzVG9SZW1vdmUgPSBuZXcgU2V0KHRoaXMuc2VsZWN0aW9uLm1hcChzID0+IHMuaWRDb250YUZpbmFuY2VpcmEpKTtcbiAgICAgICAgdGhpcy5jb250YXNEYXRhU291cmNlID0gdGhpcy5jb250YXNEYXRhU291cmNlLmZpbHRlcihjID0+ICFpZHNUb1JlbW92ZS5oYXMoYy5pZENvbnRhRmluYW5jZWlyYSkpO1xuICAgICAgICBpZHNUb1JlbW92ZS5mb3JFYWNoKGlkID0+IGRlbGV0ZSB0aGlzLmNjU2VsZWN0aW9uW2lkXSk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uID0gW107XG4gICAgICAgIHRoaXMuZW1pdENoYW5nZSgpO1xuICAgIH1cblxuICAgIC8qKiBSZW1vdmUgb3MgY2VudHJvcyBkZSBjdXN0byBzZWxlY2lvbmFkb3MgZGUgdW1hIGNvbnRhIGZpbmFuY2VpcmEuICovXG4gICAgcHVibGljIG9uRGVsZXRlU2VsZWN0ZWRDQyhjb250YTogUmF0ZWlvQ29udGEpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc2VsZWNpb25hZG9zID0gdGhpcy5jY1NlbGVjdGlvbltjb250YS5pZENvbnRhRmluYW5jZWlyYV0gfHwgW107XG4gICAgICAgIGlmICghc2VsZWNpb25hZG9zLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoe1xuICAgICAgICAgICAgICAgIHNldmVyaXR5OiAnd2FybicsXG4gICAgICAgICAgICAgICAgc3VtbWFyeTogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZXJweC5yYXRlaW9fZWRpdG9yLmVycm9fdGl0dWxvJyksXG4gICAgICAgICAgICAgICAgZGV0YWlsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlcnB4LnJhdGVpb19lZGl0b3IubmVuaHVtX2NlbnRyb19jdXN0b19zZWxlY2lvbmFkbycpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpZHNUb1JlbW92ZSA9IG5ldyBTZXQoc2VsZWNpb25hZG9zLm1hcChjYyA9PiBjYy5pZENlbnRyb0N1c3RvKSk7XG4gICAgICAgIGNvbnRhLnJhdGVpb3NDQ3VzdG8gPSBjb250YS5yYXRlaW9zQ0N1c3RvLmZpbHRlcihjYyA9PiAhaWRzVG9SZW1vdmUuaGFzKGNjLmlkQ2VudHJvQ3VzdG8pKTtcbiAgICAgICAgdGhpcy5jY1NlbGVjdGlvbltjb250YS5pZENvbnRhRmluYW5jZWlyYV0gPSBbXTtcbiAgICAgICAgdGhpcy5jb250YXNEYXRhU291cmNlID0gWy4uLnRoaXMuY29udGFzRGF0YVNvdXJjZV07XG4gICAgICAgIHRoaXMuZW1pdENoYW5nZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmVyQ29udGEoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCByZW1vdmlkYSA9IHRoaXMuY29udGFzRGF0YVNvdXJjZVtpbmRleF07XG4gICAgICAgIGlmIChyZW1vdmlkYSkgeyBkZWxldGUgdGhpcy5jY1NlbGVjdGlvbltyZW1vdmlkYS5pZENvbnRhRmluYW5jZWlyYV07IH1cbiAgICAgICAgdGhpcy5jb250YXNEYXRhU291cmNlID0gdGhpcy5jb250YXNEYXRhU291cmNlLmZpbHRlcigoXywgaSkgPT4gaSAhPT0gaW5kZXgpO1xuICAgICAgICB0aGlzLmVtaXRDaGFuZ2UoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlckNlbnRyb0N1c3RvKGNvbnRhSW5kZXg6IG51bWJlciwgY2NJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbnRhID0gdGhpcy5jb250YXNEYXRhU291cmNlW2NvbnRhSW5kZXhdO1xuICAgICAgICBjb250YS5yYXRlaW9zQ0N1c3RvID0gY29udGEucmF0ZWlvc0NDdXN0by5maWx0ZXIoKF8sIGkpID0+IGkgIT09IGNjSW5kZXgpO1xuICAgICAgICB0aGlzLmNvbnRhc0RhdGFTb3VyY2UgPSBbLi4udGhpcy5jb250YXNEYXRhU291cmNlXTtcbiAgICAgICAgdGhpcy5lbWl0Q2hhbmdlKCk7XG4gICAgfVxuXG5cbiAgICBwdWJsaWMgZ2V0Q29udGFJbmRleChyb3dEYXRhOiBSYXRlaW9Db250YSk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRhc0RhdGFTb3VyY2UuaW5kZXhPZihyb3dEYXRhKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q0NJbmRleChjb250YTogUmF0ZWlvQ29udGEsIGNjOiBSYXRlaW9DQ3VzdG8pOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gKGNvbnRhLnJhdGVpb3NDQ3VzdG8gfHwgW10pLmluZGV4T2YoY2MpO1xuICAgIH1cblxuICAgIC8vID09PSBQUklWQURPUyA9PT1cblxuICAgIC8qKiBJbmljaWFsaXphIG8gY29tcG9uZW50ZSBhIHBhcnRpciBkb3MgaW5wdXRzIChzZW0gY2hhbWFkYSDDoCBBUEkgZGUgY2FyZ2EpLiAqL1xuICAgIHByaXZhdGUgaW5pY2lhbGl6YXJQb3JJbnB1dHMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubG9hZGVkQ29udGV4dCA9ICh0aGlzLmluaXRpYWxDb250ZXh0IHx8IHt9KSBhcyBSZXRvcm5hclJhdGVpb091dHB1dDtcbiAgICAgICAgdGhpcy5wb3B1bGFyQ29tUmF0ZWlvcyh0aGlzLmluaXRpYWxSYXRlaW9zIHx8IFtdKTtcbiAgICAgICAgaWYgKCF0aGlzLmVtcHJlc2FJZCkge1xuICAgICAgICAgICAgdGhpcy5lbXByZXNhSWQgPSB0aGlzLmluaXRpYWxDb250ZXh0Py5lMDcwZmlsPy5lMDcwZW1wPy5pZDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdyaWRDb2x1bW5zID0gdGhpcy5nZXRHcmlkQ29sdW1ucygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2FycmVnYXJSYXRlaW8oKTogdm9pZCB7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuc2VydmljZVxuICAgICAgICAgICAgLnJldG9ybmFyUmF0ZWlvKHsgaWRNb3ZpbWVudG86IHRoaXMuaWRNb3ZpbWVudG8sIHRpcG9Nb3ZpbWVudG86IHRoaXMudGlwb01vdmltZW50byB9KVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksIGZpbmFsaXplKCgpID0+ICh0aGlzLmxvYWRpbmcgPSBmYWxzZSkpKVxuICAgICAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgICAob3V0cHV0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGVkQ29udGV4dCA9IG91dHB1dDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3B1bGFyQ29tUmF0ZWlvcyhvdXRwdXQucmF0ZWlvIHx8IFtdKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmVtcHJlc2FJZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbXByZXNhSWQgPSBvdXRwdXQuZTA3MGZpbC5lMDcwZW1wLmlkO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZENvbHVtbnMgPSB0aGlzLmdldEdyaWRDb2x1bW5zKCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAoZXJyKSA9PiB0aGlzLmVycm9yLmVtaXQoeyBvcGVyYWNhbzogJ2xvYWQnLCBtZXNzYWdlOiBlcnI/LmVycm9yPy5tZXNzYWdlIHx8IGVycj8ubWVzc2FnZSB8fCB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlcnB4LnJhdGVpb19lZGl0b3IuZXJyb19jYXJyZWdhcicpLCBvcmlnaW5hbEVycm9yOiBlcnIgfSlcbiAgICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwb3B1bGFyQ29tUmF0ZWlvcyhyYXRlaW9zOiBSYXRlaW9Db250YVtdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY29udGFzRGF0YVNvdXJjZSA9IFsuLi5yYXRlaW9zXTtcbiAgICAgICAgdGhpcy5jY1NlbGVjdGlvbiA9IHt9O1xuICAgICAgICB0aGlzLmNvbnRhc0RhdGFTb3VyY2UuZm9yRWFjaChjb250YSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNjU2VsZWN0aW9uW2NvbnRhLmlkQ29udGFGaW5hbmNlaXJhXSA9IFtdO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEaXN0cmlidWnDp8OjbyBjb21wbGV0YTogcmVzdGFudGVzIGdsb2JhaXMgZSBkZSBjYWRhIGNvbnRhIGlndWFpcyBhIHplcm8uXG4gICAgICogRXhwb3N0byBwdWJsaWNhbWVudGUgcGFyYSBxdWUgbyB0ZW1wbGF0ZSBwb3NzYSByZWFnaXIgYW8gZXN0YWRvIHJlYWwgZGVcbiAgICAgKiBjb21wbGV0dWRlIChjb250YXMgKyBjZW50cm9zIGRlIGN1c3RvKS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGRpc3RyaWJ1aWNhb0NvbXBsZXRhKCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5wZXJjZW50dWFsUmVzdGFudGUgIT09IDAgfHwgdGhpcy52YWxvclJlc3RhbnRlICE9PSAwKSB7IHJldHVybiBmYWxzZTsgfVxuICAgICAgICByZXR1cm4gdGhpcy5jb250YXNEYXRhU291cmNlLmV2ZXJ5KGNvbnRhID0+IHRoaXMuaXNDb250YUNDQ29tcGxldGEoY29udGEpKTtcbiAgICB9XG5cbiAgICAvKiogQGRlcHJlY2F0ZWQgVXNhciBvIGdldHRlciBgZGlzdHJpYnVpY2FvQ29tcGxldGFgLiBNYW50aWRvIHBhcmEgY29tcGF0aWJpbGlkYWRlIGludGVybmEuICovXG4gICAgcHJpdmF0ZSBpc0Rpc3RyaWJ1aWNhb0NvbXBsZXRhKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5kaXN0cmlidWljYW9Db21wbGV0YTtcbiAgICB9XG5cbiAgICAvKiogSW5kaWNhIHNlIGjDoSBhbyBtZW5vcyB1bWEgY29udGEgZmluYW5jZWlyYSBzZW0gbmVuaHVtIGNlbnRybyBkZSBjdXN0byB2aW5jdWxhZG8uICovXG4gICAgcHJpdmF0ZSBoYXNDb250YVNlbUNlbnRyb0N1c3RvKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jb250YXNEYXRhU291cmNlLnNvbWUoY29udGEgPT4gKGNvbnRhLnJhdGVpb3NDQ3VzdG8gfHwgW10pLmxlbmd0aCA9PT0gMCk7XG4gICAgfVxuXG4gICAgLyoqIFJlc3RhbnRlIGRlICUgZSBkZSB2YWxvciBkb3MgY2VudHJvcyBkZSBjdXN0byBkZSB1bWEgY29udGEgaWd1YWwgYSB6ZXJvLiAqL1xuICAgIHByaXZhdGUgaXNDb250YUNDQ29tcGxldGEoY29udGE6IFJhdGVpb0NvbnRhKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGNjcyA9IGNvbnRhLnJhdGVpb3NDQ3VzdG8gfHwgW107XG4gICAgICAgIGlmIChjY3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAvLyBTZW0gY2VudHJvIGRlIGN1c3RvIHPDsyDDqSB2w6FsaWRvIHF1YW5kbyBvIGNyaXTDqXJpbyBuw6NvIGV4aWdlIHJhdGVpbyBwb3IgQy4gQ3VzdG9zLlxuICAgICAgICAgICAgcmV0dXJuICF0aGlzLnJlcXVpcmVzQ2VudHJvQ3VzdG87XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc29tYVBjdCA9IGNjcy5yZWR1Y2UoKGFjYywgY2MpID0+IGFjYyArIChjYy5wZXJjZW50dWFsIHx8IDApLCAwKTtcbiAgICAgICAgY29uc3Qgc29tYVZhbG9yID0gY2NzLnJlZHVjZSgoYWNjLCBjYykgPT4gYWNjICsgKGNjLnZhbG9yIHx8IDApLCAwKTtcbiAgICAgICAgY29uc3QgcGN0UmVzdGFudGUgPSArKDEwMCAtIHNvbWFQY3QpLnRvRml4ZWQodGhpcy5jb25maWcucGVyY2VudGFnZVNjYWxlID8/IDQpO1xuICAgICAgICBjb25zdCB2YWxvclJlc3RhbnRlID0gKygoY29udGEudmFsb3JSYXRlYWRvQ29udGEgfHwgMCkgLSBzb21hVmFsb3IpLnRvRml4ZWQodGhpcy5jb25maWcuY3VycmVuY3lTY2FsZSA/PyAyKTtcbiAgICAgICAgcmV0dXJuIHBjdFJlc3RhbnRlID09PSAwICYmIHZhbG9yUmVzdGFudGUgPT09IDA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDb250YURpYWxvZ0ZpZWxkcygpOiBGb3JtRmllbGRbXSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLmUwOTFQbGZMb29rdXAubW91bnRPcHRpb25zKHtcbiAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXA6ICdjb250YUZpbmFuY2VpcmEnLFxuICAgICAgICAgICAgICAgICAgICBxdWVyeUZpZWxkczogWydhbmFTaW4nXSxcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdEZpbHRlcjogW1xuICAgICAgICAgICAgICAgICAgICAgICAgeyBmaWVsZDogJ2V4Y2x1aWRvJywgb3BlcmF0b3I6IEVudW1Mb2dpY2FsT3BlcmF0b3IuRXEsIHZhbHVlczogWydmYWxzZSddIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IGZpZWxkOiAnc2l0RmluJywgb3BlcmF0b3I6IEVudW1Mb2dpY2FsT3BlcmF0b3IuRXEsIHZhbHVlczogWydWQSddIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IGZpZWxkOiAnZTA3MGVtcCcsIG9wZXJhdG9yOiBFbnVtTG9naWNhbE9wZXJhdG9yLkVxLCB2YWx1ZXM6IFt0aGlzLmVtcHJlc2FJZF0gfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgc2l6ZTogeyBzbTogMTIsIG1kOiAxMiwgbGc6IDEyLCB4bDogMTIgfSxcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogKCkgPT4gdHJ1ZVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiAncGVyY2VudHVhbCcsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VycHgucmF0ZWlvX2VkaXRvci5wZXJjZW50dWFsJyksXG4gICAgICAgICAgICAgICAgc2l6ZTogeyBzbTogMTIsIG1kOiA2LCBsZzogNiwgeGw6IDYgfSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuRG91YmxlLFxuICAgICAgICAgICAgICAgIHByZWNpc2lvbjogNyxcbiAgICAgICAgICAgICAgICBzY2FsZTogdGhpcy5jb25maWcucGVyY2VudGFnZVNjYWxlID8/IDQsXG4gICAgICAgICAgICAgICAgcmlnaHRBZGRvbjogeyBsYWJlbDogJyUnIH0sXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6ICgpID0+IHRydWVcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogJ3ZhbG9yJyxcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZXJweC5yYXRlaW9fZWRpdG9yLnZhbG9yJyksXG4gICAgICAgICAgICAgICAgc2l6ZTogeyBzbTogMTIsIG1kOiA2LCBsZzogNiwgeGw6IDYgfSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuTW9uZXksXG4gICAgICAgICAgICAgICAgY3VycmVubmN5OiAoKSA9PiB0aGlzLmN1cnJlbmN5Q29kZSxcbiAgICAgICAgICAgICAgICBwcmVjaXNpb246IDE4LFxuICAgICAgICAgICAgICAgIHNjYWxlOiB0aGlzLmNvbmZpZy5jdXJyZW5jeVNjYWxlID8/IDIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6ICgpID0+IHRydWVcbiAgICAgICAgICAgIH0pXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDQ0RpYWxvZ0ZpZWxkcygpOiBGb3JtRmllbGRbXSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLmUwNDRDY3VMb29rdXAubW91bnRPcHRpb25zKHtcbiAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXA6ICdjZW50cm9DdXN0bycsXG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5RmllbGRzOiBbJ2FuYVNpbicsICdhY2VSYXQnXSxcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdEZpbHRlcjogW1xuICAgICAgICAgICAgICAgICAgICAgICAgeyBmaWVsZDogJ2V4Y2x1aWRvJywgb3BlcmF0b3I6IEVudW1Mb2dpY2FsT3BlcmF0b3IuRXEsIHZhbHVlczogWydmYWxzZSddIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IGZpZWxkOiAnc2l0Q2N1Jywgb3BlcmF0b3I6IEVudW1Mb2dpY2FsT3BlcmF0b3IuRXEsIHZhbHVlczogWydWQSddIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IGZpZWxkOiAnZTA3MGVtcCcsIG9wZXJhdG9yOiBFbnVtTG9naWNhbE9wZXJhdG9yLkVxLCB2YWx1ZXM6IFt0aGlzLmVtcHJlc2FJZF0gfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgc2l6ZTogeyBzbTogMTIsIG1kOiAxMiwgbGc6IDEyLCB4bDogMTIgfSxcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogKCkgPT4gdHJ1ZVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiAncGVyY2VudHVhbCcsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VycHgucmF0ZWlvX2VkaXRvci5wZXJjZW50dWFsJyksXG4gICAgICAgICAgICAgICAgc2l6ZTogeyBzbTogMTIsIG1kOiA2LCBsZzogNiwgeGw6IDYgfSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuRG91YmxlLFxuICAgICAgICAgICAgICAgIHByZWNpc2lvbjogNyxcbiAgICAgICAgICAgICAgICBzY2FsZTogdGhpcy5jb25maWcucGVyY2VudGFnZVNjYWxlID8/IDQsXG4gICAgICAgICAgICAgICAgcmlnaHRBZGRvbjogeyBsYWJlbDogJyUnIH0sXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6ICgpID0+IHRydWVcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogJ3ZhbG9yJyxcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZXJweC5yYXRlaW9fZWRpdG9yLnZhbG9yJyksXG4gICAgICAgICAgICAgICAgc2l6ZTogeyBzbTogMTIsIG1kOiA2LCBsZzogNiwgeGw6IDYgfSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuTW9uZXksXG4gICAgICAgICAgICAgICAgY3VycmVubmN5OiAoKSA9PiB0aGlzLmN1cnJlbmN5Q29kZSxcbiAgICAgICAgICAgICAgICBwcmVjaXNpb246IDE4LFxuICAgICAgICAgICAgICAgIHNjYWxlOiB0aGlzLmNvbmZpZy5jdXJyZW5jeVNjYWxlID8/IDIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6ICgpID0+IHRydWVcbiAgICAgICAgICAgIH0pXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2luY3Jvbml6YSBvcyBjYW1wb3MgcGVyY2VudHVhbCBlIHZhbG9yIGRlIHVtIEZvcm1Hcm91cCBkZSBtb2RhbC5cbiAgICAgKiBRdWFuZG8gbyB1c3XDoXJpbyBhbHRlcmEgcGVyY2VudHVhbCwgcmVjYWxjdWxhIHZhbG9yIChwZXJjZW50dWFsLzEwMCAqIGJhc2UpLlxuICAgICAqIFF1YW5kbyBvIHVzdcOhcmlvIGFsdGVyYSB2YWxvciwgcmVjYWxjdWxhIHBlcmNlbnR1YWwgKHZhbG9yL2Jhc2UgKiAxMDApLlxuICAgICAqIE8gYXJndW1lbnRvIGdldEJhc2UgcmV0b3JuYSBhIGJhc2UgdXNhZGEgbm8gY8OhbGN1bG8gKHZhbG9yQmFzZSBnbG9iYWwgb3UgdmFsb3JSYXRlYWRvQ29udGEgZGEgY29udGEgcGFpKS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHNldHVwUGVyY2VudHVhbFZhbG9yU3luYyhmb3JtOiBGb3JtR3JvdXAsIGdldEJhc2U6ICgpID0+IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBwZXJjZW50dWFsU2NhbGUgPSB0aGlzLmNvbmZpZy5wZXJjZW50YWdlU2NhbGUgPz8gNDtcbiAgICAgICAgY29uc3QgY3VycmVuY3lTY2FsZSA9IHRoaXMuY29uZmlnLmN1cnJlbmN5U2NhbGUgPz8gMjtcblxuICAgICAgICBmb3JtLmdldCgncGVyY2VudHVhbCcpLnZhbHVlQ2hhbmdlc1xuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHBjdCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmFzZSA9IGdldEJhc2UoKTtcbiAgICAgICAgICAgICAgICBpZiAocGN0ID09IG51bGwgfHwgYmFzZSA9PSBudWxsKSB7IHJldHVybjsgfVxuICAgICAgICAgICAgICAgIGNvbnN0IG5vdm9WYWxvciA9ICsoKE51bWJlcihwY3QpIC8gMTAwKSAqIGJhc2UpLnRvRml4ZWQoY3VycmVuY3lTY2FsZSk7XG4gICAgICAgICAgICAgICAgaWYgKE51bWJlcihmb3JtLmdldCgndmFsb3InKS52YWx1ZSkgIT09IG5vdm9WYWxvcikge1xuICAgICAgICAgICAgICAgICAgICBmb3JtLmdldCgndmFsb3InKS5zZXRWYWx1ZShub3ZvVmFsb3IsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBmb3JtLmdldCgndmFsb3InKS52YWx1ZUNoYW5nZXNcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSh2YWwgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJhc2UgPSBnZXRCYXNlKCk7XG4gICAgICAgICAgICAgICAgaWYgKHZhbCA9PSBudWxsIHx8ICFiYXNlKSB7IHJldHVybjsgfVxuICAgICAgICAgICAgICAgIGNvbnN0IG5vdm9QY3QgPSArKChOdW1iZXIodmFsKSAvIGJhc2UpICogMTAwKS50b0ZpeGVkKHBlcmNlbnR1YWxTY2FsZSk7XG4gICAgICAgICAgICAgICAgaWYgKE51bWJlcihmb3JtLmdldCgncGVyY2VudHVhbCcpLnZhbHVlKSAhPT0gbm92b1BjdCkge1xuICAgICAgICAgICAgICAgICAgICBmb3JtLmdldCgncGVyY2VudHVhbCcpLnNldFZhbHVlKG5vdm9QY3QsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEdyaWRDb2x1bW5zKCk6IGFueVtdIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHsgZmllbGQ6ICdjb250YUZpbmFuY2VpcmEnLCBoZWFkZXI6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VycHgucmF0ZWlvX2VkaXRvci5jb250YV9maW5hbmNlaXJhJykgfSxcbiAgICAgICAgICAgIHsgZmllbGQ6ICdwZXJjZW50dWFsJywgaGVhZGVyOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlcnB4LnJhdGVpb19lZGl0b3IucGVyY2VudHVhbCcpIH0sXG4gICAgICAgICAgICB7IGZpZWxkOiAndmFsb3JSYXRlYWRvQ29udGEnLCBoZWFkZXI6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VycHgucmF0ZWlvX2VkaXRvci52YWxvcicpIH1cbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGVtaXRDaGFuZ2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2hhbmdlLmVtaXQoe1xuICAgICAgICAgICAgaXNEaXJ0eTogdHJ1ZSxcbiAgICAgICAgICAgIGlzVmFsaWQ6IHRoaXMuaXNEaXN0cmlidWljYW9Db21wbGV0YSgpLFxuICAgICAgICAgICAgcmF0ZWlvczogdGhpcy5jb250YXNEYXRhU291cmNlXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==
794
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJwLXJhdGVpby1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHNlbmlvci1nZXN0YW8tZW1wcmVzYXJpYWwvZXJweC1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiY29tcG9uZW50cy9yYXRlaW8tZWRpdG9yL2VycC1yYXRlaW8tZWRpdG9yLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBd0IsTUFBTSxFQUFpQixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkgsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQy9FLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLG1CQUFtQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDbEgsT0FBTyxFQUNILGNBQWMsRUFDZCxVQUFVLEVBQ1YsU0FBUyxFQUNULFNBQVMsRUFDWixNQUFNLG9DQUFvQyxDQUFDO0FBRTVDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQWtCckUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQU96QyxJQUFhLHdCQUF3QixnQ0FBckMsTUFBYSx3QkFBd0I7SUEwTmpDLFlBQ3FCLEVBQWUsRUFDZixPQUErQixFQUMvQixTQUEyQixFQUMzQixhQUE0QixFQUM1QixhQUE0QixFQUM1QixjQUE4QjtRQUw5QixPQUFFLEdBQUYsRUFBRSxDQUFhO1FBQ2YsWUFBTyxHQUFQLE9BQU8sQ0FBd0I7UUFD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QUFFOzZEQUFvQjtBQU1uQjtJQUFSLEtBQUssRUFBRTsyREFBbUI7QUFNbEI7SUFBUixLQUFLLEVBQUU7MERBQWtCO0FBTWpCO0lBQVIsS0FBSyxFQUFFO3dEQUErQjtBQU05QjtJQUFSLEtBQUssRUFBRTsyREFBbUI7QUFNbEI7SUFBUixLQUFLLEVBQUU7MkRBQW1CO0FBS2xCO0lBQVIsS0FBSyxFQUFFOzZEQUFxQjtBQUtwQjtJQUFSLEtBQUssRUFBRTsyREFBbUI7QUFLbEI7SUFBUixLQUFLLEVBQUU7NkRBQXFCO0FBS3BCO0lBQVIsS0FBSyxFQUFFOzJEQUFtQjtBQU1sQjtJQUFSLEtBQUssRUFBRTtnRUFBd0I7QUFNdkI7SUFBUixLQUFLLEVBQUU7OERBQXNCO0FBR3BCO0lBQVQsTUFBTSxFQUFFO3NEQUE0QztBQUMzQztJQUFULE1BQU0sRUFBRTt3REFBbUM7QUFDbEM7SUFBVCxNQUFNLEVBQUU7d0RBQWdEO0FBQy9DO0lBQVQsTUFBTSxFQUFFO3VEQUE4QztBQUc3QjtJQUF6QixTQUFTLENBQUMsYUFBYSxDQUFDO3VEQUF1QjtBQXhHdkMsd0JBQXdCO0lBTHBDLFNBQVMsQ0FBQztRQUNQLFFBQVEsRUFBRSxtQkFBbUI7UUFDN0IsbW1mQUFpRDs7S0FFcEQsQ0FBQztHQUNXLHdCQUF3QixDQTgxQnBDO1NBOTFCWSx3QkFBd0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUFycmF5LCBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgRTA0NENjdUxvb2t1cCwgRTA5MVBsZkxvb2t1cCwgRW51bUxvZ2ljYWxPcGVyYXRvciB9IGZyb20gJ0BzZW5pb3ItZ2VzdGFvLWVtcHJlc2FyaWFsL2FuZ3VsYXItY29tcG9uZW50cyc7XG5pbXBvcnQge1xuICAgIEJ1dHRvblByaW9yaXR5LFxuICAgIEJ1dHRvblNpemUsXG4gICAgRmllbGRUeXBlLFxuICAgIEZvcm1GaWVsZFxufSBmcm9tICdAc2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzJztcbmltcG9ydCB7IFRhYmxlIH0gZnJvbSAncHJpbWVuZy90YWJsZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaW5hbGl6ZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRXJwUmF0ZWlvRWRpdG9yU2VydmljZSB9IGZyb20gJy4vZXJwLXJhdGVpby1lZGl0b3Iuc2VydmljZSc7XG5pbXBvcnQge1xuICAgIEdyYXZhclJhdGVpb01hbnVhbElucHV0LFxuICAgIEludGVncmFjYW9Db250cm9sYWRvcmlhLFxuICAgIFJhdGVpb0NoYW5nZUV2ZW50LFxuICAgIFJhdGVpb0NvbnRhLFxuICAgIFJhdGVpb0NDdXN0byxcbiAgICBSYXRlaW9FZGl0b3JDb25maWcsXG4gICAgUmF0ZWlvRXJyb3JFdmVudCxcbiAgICBSYXRlaW9TYXZlRXZlbnQsXG4gICAgUmV0b3JuYXJSYXRlaW9PdXRwdXQsXG4gICAgU3VnZXJpclJhdGVpb0lucHV0LFxuICAgIFN1Z2VyaXJSYXRlaW9QYXJhbWV0cm8sXG4gICAgVGlwb01vdmltZW50byxcbiAgICBDcml0ZXJpb1JhdGVpbyxcbiAgICBDb250YUZpbmFuY2VpcmFMb29rdXAsXG4gICAgQ2VudHJvQ3VzdG9Mb29rdXBcbn0gZnJvbSAnLi9lcnAtcmF0ZWlvLWVkaXRvci50eXBlcyc7XG5pbXBvcnQgeyBNZXNzYWdlU2VydmljZSB9IGZyb20gJ3ByaW1lbmcnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2VycC1yYXRlaW8tZWRpdG9yJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZXJwLXJhdGVpby1lZGl0b3IuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2VycC1yYXRlaW8tZWRpdG9yLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgRXJwUmF0ZWlvRWRpdG9yQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuXG4gICAgLyoqIFZhbG9yIGRlIGFuYVNpbiBxdWUgaW5kaWNhIHJlZ2lzdHJvIHNpbnTDqXRpY28gKG7Do28gYW5hbMOtdGljbykuICovXG4gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgQU5BX1NJTl9TSU5URVRJQ08gPSAnVlMnO1xuXG4gICAgLy8gPT09IElOUFVUUyA9PT1cbiAgICBASW5wdXQoKSBpZE1vdmltZW50bzogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHRpcG9Nb3ZpbWVudG86IFRpcG9Nb3ZpbWVudG87XG4gICAgQElucHV0KCkgcmVhZE9ubHkgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBzaG93U3VnZXN0YW9CdXR0b24gPSB0cnVlO1xuICAgIEBJbnB1dCgpIGNvbmZpZzogUmF0ZWlvRWRpdG9yQ29uZmlnO1xuXG4gICAgLyoqXG4gICAgICogQ29udGV4dG8gaW5pY2lhbCB1c2FkbyBxdWFuZG8gbyBjb21wb25lbnRlIMOpIGFsaW1lbnRhZG8gcG9yIGlucHV0cyBlbSB2ZXogZGEgQVBJLlxuICAgICAqIEFwbGljYS1zZSBhbyBtb2RvIHN0YW5kYWxvbmUgKHNlbSBpZE1vdmltZW50bykgZSBhbyBtb2RvIGNvbmVjdGFkbyBjb21cbiAgICAgKiBsb2FkRnJvbUFwaSA9IGZhbHNlLiBGb3JuZWNlIHZhbG9yQmFzZSwgZmlsaWFsLCBjcml0w6lyaW8sIGFncnVwYWRvcklkLCBkYXRhcywgZXRjLlxuICAgICAqIEVtIG1vZG8gY29uZWN0YWRvIHNlbSBjYXJnYSB2aWEgQVBJLCDDqSBkZXN0ZSBjb250ZXh0byBxdWUgYSBncmF2YcOnw6NvXG4gICAgICogKGdyYXZhclJhdGVpb01hbnVhbCkgb2J0w6ltIGUwNzBmaWwsIGNyaVJhdCwgZGF0YUJhc2UsIGRhdGFNb3ZpbWVudG8gZSBhZ3J1cGFkb3JJZC5cbiAgICAgKi9cbiAgICBASW5wdXQoKSBpbml0aWFsQ29udGV4dD86IFBhcnRpYWw8UmV0b3JuYXJSYXRlaW9PdXRwdXQ+O1xuXG4gICAgLyoqIFJhdGVpb3MgaW5pY2lhaXMgcGFyYSBwb3B1bGFyIGEgZ3JpZCBxdWFuZG8gYWxpbWVudGFkbyBwb3IgaW5wdXRzLiAqL1xuICAgIEBJbnB1dCgpIGluaXRpYWxSYXRlaW9zPzogUmF0ZWlvQ29udGFbXTtcblxuICAgIC8qKlxuICAgICAqIENvbnRyb2xhIHNlIG8gcmF0ZWlvIGRldmUgc2VyIGNhcnJlZ2FkbyBhdXRvbWF0aWNhbWVudGUgdmlhIEFQSSBxdWFuZG9cbiAgICAgKiBpZE1vdmltZW50byBlc3TDoSBwcmVzZW50ZSAobW9kbyBjb25lY3RhZG8pLiBEZWZhdWx0OiB0cnVlLlxuICAgICAqXG4gICAgICogRGVmaW5hIGNvbW8gZmFsc2UgcGFyYSByZXN0YXVyYXIgdW0gcmF0ZWlvIHF1ZSBvIHVzdcOhcmlvIGrDoSBkaXN0cmlidWl1IGUgcXVlXG4gICAgICogYWluZGEgbsOjbyBmb2kgcGVyc2lzdGlkbyBubyBiYWNrZW5kIGRlIHJhdGVpbzogbyBjb21wb25lbnRlIHBvcHVsYSBhIGdyaWQgYVxuICAgICAqIHBhcnRpciBkZSBpbml0aWFsQ29udGV4dC9pbml0aWFsUmF0ZWlvcyBlIG1hbnTDqW0gbyBib3TDo28gU2FsdmFyIGUgYSBncmF2YcOnw6NvXG4gICAgICogdmluY3VsYWRhIGFvIG1vdmltZW50by5cbiAgICAgKi9cbiAgICBASW5wdXQoKSBsb2FkRnJvbUFwaSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBJRCBkYSBlbXByZXNhIHVzYWRvIHBhcmEgZmlsdHJhciBvcyBsb29rdXBzIGRlIGNvbnRhIGZpbmFuY2VpcmEgZSBjZW50cm8gZGUgY3VzdG8uXG4gICAgICogUXVhbmRvIGluZm9ybWFkbywgc29icmVzY3JldmUgbyBJRCBkZXJpdmFkbyBkbyBjb250ZXh0byBjYXJyZWdhZG8vaW5pY2lhbC5cbiAgICAgKi9cbiAgICBASW5wdXQoKSBlbXByZXNhSWQ6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIElEIGRhIGZpbGlhbCB1c2FkbyBwZWxhIEFQSSBkZSBzdWdlc3TDo28gZGUgcmF0ZWlvLlxuICAgICAqIFF1YW5kbyBpbmZvcm1hZG8sIHRlbSBwcmlvcmlkYWRlIHNvYnJlIG8gSUQgZGVyaXZhZG8gZG8gY29udGV4dG8uXG4gICAgICovXG4gICAgQElucHV0KCkgZmlsaWFsSWQ6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIENyaXTDqXJpbyBkZSByYXRlaW8gcGFkcsOjbyB1c2FkbyBwZWxhIEFQSSBkZSBzdWdlc3TDo28uXG4gICAgICogRGVmYXVsdDogJ1YzJyAoRGVzcGVzYXMg4oCUIENvbnRhIFggQy4gQ3VzdG9zKS5cbiAgICAgKi9cbiAgICBASW5wdXQoKSBjcmlSYXQ6IENyaXRlcmlvUmF0ZWlvID0gJ1YzJztcblxuICAgIC8qKlxuICAgICAqIElEIGRhIGNvbnRhIGZpbmFuY2VpcmEgKGUwOTFwbGYpIHBhcmEgZmlsdHJhciBhIHN1Z2VzdMOjbyBkZSByYXRlaW8uXG4gICAgICogUXVhbmRvIGluZm9ybWFkbywgw6kgZW52aWFkbyBjb21vIHBhcsOibWV0cm8gbmEgQVBJIHN1Z2VyaXJSYXRlaW8uXG4gICAgICovXG4gICAgQElucHV0KCkgZTA5MXBsZklkOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBJRCBkbyBjZW50cm8gZGUgY3VzdG8gKGUwNDRjY3UpIHBhcmEgZmlsdHJhciBhIHN1Z2VzdMOjbyBkZSByYXRlaW8uXG4gICAgICogUXVhbmRvIGluZm9ybWFkbywgw6kgZW52aWFkbyBjb21vIHBhcsOibWV0cm8gbmEgQVBJIHN1Z2VyaXJSYXRlaW8uXG4gICAgICovXG4gICAgQElucHV0KCkgZTA0NGNjdUlkOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBJRCBkYSB0cmFuc2HDp8OjbyB1c2FkYSBwYXJhIGZpbHRyYXIgYSBzdWdlc3TDo28gZGUgcmF0ZWlvLlxuICAgICAqL1xuICAgIEBJbnB1dCgpIGlkVHJhbnNhY2FvOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBJRCBkYSBmYW3DrWxpYSB1c2FkYSBwYXJhIGZpbHRyYXIgYSBzdWdlc3TDo28gZGUgcmF0ZWlvLlxuICAgICAqL1xuICAgIEBJbnB1dCgpIGlkRmFtaWxpYTogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogSUQgZGEgZGVyaXZhw6fDo28gdXNhZGEgcGFyYSBmaWx0cmFyIGEgc3VnZXN0w6NvIGRlIHJhdGVpby5cbiAgICAgKi9cbiAgICBASW5wdXQoKSBpZERlcml2YWNhbzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogSUQgZG8gc2VydmnDp28gdXNhZG8gcGFyYSBmaWx0cmFyIGEgc3VnZXN0w6NvIGRlIHJhdGVpby5cbiAgICAgKi9cbiAgICBASW5wdXQoKSBpZFNlcnZpY286IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFZhbG9yIGV4Y2VkZW50ZSBpbmZvcm1hZG8gcGFyYSBhIHN1Z2VzdMOjbyBkZSByYXRlaW8uXG4gICAgICogUXVhbmRvIGluZm9ybWFkbywgw6kgZW52aWFkbyBjb21vIHBhcsOibWV0cm8gbmEgQVBJIHN1Z2VyaXJSYXRlaW8uXG4gICAgICovXG4gICAgQElucHV0KCkgdmFsb3JFeGNlZGVudGU6IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIEPDs2RpZ28gSVNPIGRhIG1vZWRhIHBhcmEgZm9ybWF0YcOnw6NvIGRlIHZhbG9yZXMgbmEgZ3JpZCAoZXg6ICdCUkwnLCAnVVNEJykuXG4gICAgICogU2UgbsOjbyBpbmZvcm1hZG8sIHVzYSBlc3RpbG8gZGVjaW1hbCBzZW0gc8OtbWJvbG8uXG4gICAgICovXG4gICAgQElucHV0KCkgY3VycmVuY3lDb2RlOiBzdHJpbmc7XG5cbiAgICAvLyA9PT0gT1VUUFVUUyA9PT1cbiAgICBAT3V0cHV0KCkgc2F2ZSA9IG5ldyBFdmVudEVtaXR0ZXI8UmF0ZWlvU2F2ZUV2ZW50PigpO1xuICAgIEBPdXRwdXQoKSBjYW5jZWwgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gICAgQE91dHB1dCgpIGNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8UmF0ZWlvQ2hhbmdlRXZlbnQ+KCk7XG4gICAgQE91dHB1dCgpIGVycm9yID0gbmV3IEV2ZW50RW1pdHRlcjxSYXRlaW9FcnJvckV2ZW50PigpO1xuXG4gICAgLy8gPT09IFJFRkVSw4pOQ0lBUyBETyBURU1QTEFURSA9PT1cbiAgICBAVmlld0NoaWxkKCd0YWJsZVJhdGVpbycpIHJlYWRvbmx5IHRhYmxlOiBUYWJsZTtcblxuICAgIC8vID09PSBDT05TVEFOVEVTIEVYUE9TVEFTIEFPIFRFTVBMQVRFID09PVxuICAgIHJlYWRvbmx5IEJ1dHRvblByaW9yaXR5ID0gQnV0dG9uUHJpb3JpdHk7XG4gICAgcmVhZG9ubHkgQnV0dG9uU2l6ZSA9IEJ1dHRvblNpemU7XG5cbiAgICAvLyA9PT0gRVNUQURPID09PVxuICAgIHB1YmxpYyBmb3JtR3JvdXA6IEZvcm1Hcm91cDtcbiAgICBwdWJsaWMgbG9hZGluZyA9IGZhbHNlO1xuICAgIHB1YmxpYyBsb2FkZWRDb250ZXh0OiBSZXRvcm5hclJhdGVpb091dHB1dDtcbiAgICBwdWJsaWMgc2VsZWN0aW9uOiBhbnlbXSA9IFtdO1xuICAgIC8qKiBTZWxlw6fDo28gZGUgY2VudHJvcyBkZSBjdXN0byBwb3IgY29udGEgZmluYW5jZWlyYSAoa2V5ZWQgcG9yIGlkQ29udGFGaW5hbmNlaXJhKS4gKi9cbiAgICBwdWJsaWMgY2NTZWxlY3Rpb246IHsgW2lkQ29udGFGaW5hbmNlaXJhOiBzdHJpbmddOiBSYXRlaW9DQ3VzdG9bXSB9ID0ge307XG4gICAgcHVibGljIGdyaWRDb2x1bW5zOiBhbnlbXTtcbiAgICBwdWJsaWMgY29udGFzRGF0YVNvdXJjZTogUmF0ZWlvQ29udGFbXSA9IFtdO1xuICAgIHB1YmxpYyBlZGl0aW5nUm93QmFja3VwOiBSYXRlaW9Db250YSB8IG51bGwgPSBudWxsO1xuICAgIHB1YmxpYyBlZGl0aW5nQ0NCYWNrdXA6IFJhdGVpb0NDdXN0byB8IG51bGwgPSBudWxsO1xuXG4gICAgLyoqIMOabHRpbW8gdmFsb3Igc2VsZWNpb25hZG8gbm8gbG9va3VwIGRlIGNvbnRhIChjYXJyZWdhIGFuYVNpbiBwYXJhIHZhbGlkYcOnw6NvKS4gKi9cbiAgICBwdWJsaWMgc2VsZWN0ZWRDb250YTogQ29udGFGaW5hbmNlaXJhTG9va3VwIHwgbnVsbCA9IG51bGw7XG4gICAgLyoqIMOabHRpbW8gdmFsb3Igc2VsZWNpb25hZG8gbm8gbG9va3VwIGRlIGNlbnRybyBkZSBjdXN0byAoY2FycmVnYSBhbmFTaW4vYWNlUmF0KS4gKi9cbiAgICBwdWJsaWMgc2VsZWN0ZWRDQzogQ2VudHJvQ3VzdG9Mb29rdXAgfCBudWxsID0gbnVsbDtcblxuICAgIC8vID09PSBNT0RBTCBDT05UQSBGSU5BTkNFSVJBID09PVxuICAgIHB1YmxpYyBkaXNwbGF5Q29udGFEaWFsb2cgPSBmYWxzZTtcbiAgICBwdWJsaWMgY29udGFEaWFsb2dGb3JtR3JvdXA6IEZvcm1Hcm91cDtcbiAgICBwdWJsaWMgY29udGFEaWFsb2dGaWVsZHM6IEZvcm1GaWVsZFtdO1xuICAgIHB1YmxpYyBlZGl0aW5nQ29udGFJbmRleDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvLyA9PT0gTU9EQUwgQ0VOVFJPIERFIENVU1RPID09PVxuICAgIHB1YmxpYyBkaXNwbGF5Q0NEaWFsb2cgPSBmYWxzZTtcbiAgICBwdWJsaWMgY2NEaWFsb2dGb3JtR3JvdXA6IEZvcm1Hcm91cDtcbiAgICBwdWJsaWMgY2NEaWFsb2dGaWVsZHM6IEZvcm1GaWVsZFtdO1xuICAgIHB1YmxpYyBlZGl0aW5nQ0NDb250YUluZGV4OiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgICBwdWJsaWMgZWRpdGluZ0NDSW5kZXg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBuZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIHB1YmxpYyBnZXQgZWZmZWN0aXZlUmVhZE9ubHkoKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGljOiBJbnRlZ3JhY2FvQ29udHJvbGFkb3JpYSB8IHVuZGVmaW5lZCA9IHRoaXMubG9hZGVkQ29udGV4dD8uaW50ZWdyYWNhb0NvbnRyb2xhZG9yaWE7XG4gICAgICAgIGNvbnN0IGhhc0ludGVncmFjYW8gPSAhIWljICYmIChcbiAgICAgICAgICAgIGljLmNvbnRhYmlsaWRhZGUgPT09IHRydWUgfHxcbiAgICAgICAgICAgIGljLnRyaWJ1dG9zID09PSB0cnVlIHx8XG4gICAgICAgICAgICBpYy5wYXRyaW1vbmlvID09PSB0cnVlXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB0aGlzLnJlYWRPbmx5IHx8IGhhc0ludGVncmFjYW87XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjb250YXNGb3JtQXJyYXkoKTogRm9ybUFycmF5IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybUdyb3VwLmdldCgnY29udGFzJykgYXMgRm9ybUFycmF5O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgdmFsb3JCYXNlKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvYWRlZENvbnRleHQ/LnZhbG9yQmFzZSA/PyAwO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcGVyY2VudHVhbFJlc3RhbnRlKCk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IHNvbWEgPSB0aGlzLmNvbnRhc0RhdGFTb3VyY2UucmVkdWNlKFxuICAgICAgICAgICAgKGFjYywgY29udGEpID0+IGFjYyArIChjb250YS5wZXJjZW50dWFsIHx8IDApLCAwXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiArKDEwMCAtIHNvbWEpLnRvRml4ZWQodGhpcy5jb25maWcucGVyY2VudGFnZVNjYWxlID8/IDQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgdmFsb3JSZXN0YW50ZSgpOiBudW1iZXIge1xuICAgICAgICBjb25zdCBzb21hID0gdGhpcy5jb250YXNEYXRhU291cmNlLnJlZHVjZShcbiAgICAgICAgICAgIChhY2MsIGNvbnRhKSA9PiBhY2MgKyAoY29udGEudmFsb3JSYXRlYWRvQ29udGEgfHwgMCksIDBcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuICsodGhpcy52YWxvckJhc2UgLSBzb21hKS50b0ZpeGVkKHRoaXMuY29uZmlnLmN1cnJlbmN5U2NhbGUgPz8gMik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVmFsb3IgcmVzdGFudGUgYSBzZXIgZXhpYmlkbyBub3MgY2FyZHMgZGUgcmVzdW1vLlxuICAgICAqIENvbnNpZGVyYSBvIHRvdGFsIGrDoSBkaXN0cmlidcOtZG8gbm9zIGNlbnRyb3MgZGUgY3VzdG8gZGUgdG9kYXMgYXMgY29udGFzXG4gICAgICogKGUgbsOjbyBvIHRvdGFsIGRhcyBjb250YXMgZmluYW5jZWlyYXMpLCByZWZsZXRpbmRvIGEgZGlzdHJpYnVpw6fDo28gcmVhbFxuICAgICAqIHBvbnRhLWEtcG9udGEg4oCUIGNlbnRybyBkZSBjdXN0byDDqSBzZW1wcmUgb2JyaWdhdMOzcmlvLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgdmFsb3JSZXN0YW50ZURpc3BsYXkoKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgdG90YWxDQyA9IHRoaXMuY29udGFzRGF0YVNvdXJjZS5yZWR1Y2UoXG4gICAgICAgICAgICAoYWNjLCBjb250YSkgPT4gYWNjICsgKGNvbnRhLnJhdGVpb3NDQ3VzdG8gfHwgW10pLnJlZHVjZShcbiAgICAgICAgICAgICAgICAoY2NBY2MsIGNjKSA9PiBjY0FjYyArIChjYy52YWxvciB8fCAwKSwgMFxuICAgICAgICAgICAgKSwgMFxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gKyh0aGlzLnZhbG9yQmFzZSAtIHRvdGFsQ0MpLnRvRml4ZWQodGhpcy5jb25maWcuY3VycmVuY3lTY2FsZSA/PyAyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQZXJjZW50dWFsIHJlc3RhbnRlIGEgc2VyIGV4aWJpZG8gbm9zIGNhcmRzIGRlIHJlc3Vtby5cbiAgICAgKiBEZXJpdmFkbyBkZSBgdmFsb3JSZXN0YW50ZURpc3BsYXlgIHBhcmEgbWFudGVyIGNvbnNpc3TDqm5jaWEgY29tIG8gdmFsb3IuXG4gICAgICovXG4gICAgcHVibGljIGdldCBwZXJjZW50dWFsUmVzdGFudGVEaXNwbGF5KCk6IG51bWJlciB7XG4gICAgICAgIGlmICghdGhpcy52YWxvckJhc2UpIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiArKHRoaXMudmFsb3JSZXN0YW50ZURpc3BsYXkgLyB0aGlzLnZhbG9yQmFzZSAqIDEwMCkudG9GaXhlZCh0aGlzLmNvbmZpZy5wZXJjZW50YWdlU2NhbGUgPz8gNCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBudW1iZXJGb3JtYXRPcHRpb25zKCk6IGFueSB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbmN5Q29kZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBudW1iZXJGb3JtYXRPcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgIHN0eWxlOiAnY3VycmVuY3knLFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW5jeTogdGhpcy5jdXJyZW5jeUNvZGVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBudW1iZXJGb3JtYXRPcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgc3R5bGU6ICdkZWNpbWFsJyxcbiAgICAgICAgICAgICAgICBtaW5pbXVtRnJhY3Rpb25EaWdpdHM6IHRoaXMuY29uZmlnLmN1cnJlbmN5U2NhbGUgPz8gMixcbiAgICAgICAgICAgICAgICBtYXhpbXVtRnJhY3Rpb25EaWdpdHM6IHRoaXMuY29uZmlnLmN1cnJlbmN5U2NhbGUgPz8gMlxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGZiOiBGb3JtQnVpbGRlcixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBzZXJ2aWNlOiBFcnBSYXRlaW9FZGl0b3JTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBlMDkxUGxmTG9va3VwOiBFMDkxUGxmTG9va3VwLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGUwNDRDY3VMb29rdXA6IEUwNDRDY3VMb29rdXAsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICAgICAgICBjb250YXM6IHRoaXMuZmIuYXJyYXkoW10pXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG1vdmltZW50b0NoYW5nZWQgPSBjaGFuZ2VzLmlkTW92aW1lbnRvIHx8IGNoYW5nZXMudGlwb01vdmltZW50bztcblxuICAgICAgICBpZiAobW92aW1lbnRvQ2hhbmdlZCAmJiB0aGlzLmlkTW92aW1lbnRvICYmIHRoaXMudGlwb01vdmltZW50byAmJiB0aGlzLmxvYWRGcm9tQXBpKSB7XG4gICAgICAgICAgICAvLyBNb2RvIGNvbmVjdGFkbyBjb20gY2FyZ2EgdmlhIEFQSVxuICAgICAgICAgICAgdGhpcy5jYXJyZWdhclJhdGVpbygpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNJbnB1dERyaXZlbiAmJiAoY2hhbmdlcy5pbml0aWFsQ29udGV4dCB8fCBjaGFuZ2VzLmluaXRpYWxSYXRlaW9zIHx8IGNoYW5nZXMubG9hZEZyb21BcGkgfHwgbW92aW1lbnRvQ2hhbmdlZCkpIHtcbiAgICAgICAgICAgIC8vIEFsaW1lbnRhZG8gcG9yIGlucHV0czogbW9kbyBzdGFuZGFsb25lIE9VIGNvbmVjdGFkbyBzZW0gY2FyZ2EgdmlhIEFQSVxuICAgICAgICAgICAgdGhpcy5pbmljaWFsaXphclBvcklucHV0cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIFJldG9ybmEgbyBjb250ZcO6ZG8gYXR1YWwgZGEgZ3JpZCAodXNvIHN0YW5kYWxvbmUg4oCUIHF1ZW0gY29uc29tZSBsw6ogb3MgcmF0ZWlvcyBkYXF1aSkuICovXG4gICAgcHVibGljIGdldCByYXRlaW9zKCk6IFJhdGVpb0NvbnRhW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5jb250YXNEYXRhU291cmNlO1xuICAgIH1cblxuICAgIC8qKiBJbmRpY2Egc2UgbyBjb21wb25lbnRlIGVzdMOhIG9wZXJhbmRvIHNlbSBpZE1vdmltZW50byAobW9kbyBzdGFuZGFsb25lKS4gKi9cbiAgICBwdWJsaWMgZ2V0IGlzU3RhbmRhbG9uZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLmlkTW92aW1lbnRvO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEluZGljYSBzZSBvIGNvbXBvbmVudGUgw6kgYWxpbWVudGFkbyBwb3IgaW5wdXRzIGVtIHZleiBkYSBBUEk6XG4gICAgICogbW9kbyBzdGFuZGFsb25lIChzZW0gaWRNb3ZpbWVudG8pIE9VIG1vZG8gY29uZWN0YWRvIGNvbSBsb2FkRnJvbUFwaSA9IGZhbHNlLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgaXNJbnB1dERyaXZlbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNTdGFuZGFsb25lIHx8ICF0aGlzLmxvYWRGcm9tQXBpO1xuICAgIH1cblxuICAgIC8qKiBJbmRpY2Egc2UgbyBjb21wb25lbnRlIGVzdMOhIHByb250byBwYXJhIGV4aWJpciBVSSAoY2FycmVnb3UgdmlhIEFQSSBPVSBmb2kgaW5pY2lhbGl6YWRvIHBvciBpbnB1dHMpLiAqL1xuICAgIHB1YmxpYyBnZXQgaXNSZWFkeSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5sb2FkZWRDb250ZXh0IHx8IHRoaXMuaXNJbnB1dERyaXZlbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMubmdVbnN1YnNjcmliZS5uZXh0KCk7XG4gICAgICAgIHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIC8vID09PSBBw4fDlUVTIFDDmkJMSUNBUyA9PT1cblxuICAgIHB1YmxpYyBvblNhbHZhcigpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZWZmZWN0aXZlUmVhZE9ubHkpIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgaWYgKHRoaXMuaGFzQ29udGFTZW1DZW50cm9DdXN0bygpKSB7XG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZXJweC5yYXRlaW9fZWRpdG9yLmVycm9fY2VudHJvX2N1c3RvX29icmlnYXRvcmlvJyk7XG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7XG4gICAgICAgICAgICAgICAgc2V2ZXJpdHk6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgc3VtbWFyeTogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZXJweC5yYXRlaW9fZWRpdG9yLmVycm9fdGl0dWxvJyksXG4gICAgICAgICAgICAgICAgZGV0YWlsOiBtZXNzYWdlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuZXJyb3IuZW1pdCh7IG9wZXJhY2FvOiAnc2F2ZScsIG1lc3NhZ2UgfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuaXNEaXN0cmlidWljYW9Db21wbGV0YSgpKSB7XG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZXJweC5yYXRlaW9fZWRpdG9yLmVycm9fZGlzdHJpYnVpY2FvX2luY29tcGxldGEnKTtcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHtcbiAgICAgICAgICAgICAgICBzZXZlcml0eTogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICBzdW1tYXJ5OiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlcnB4LnJhdGVpb19lZGl0b3IuZXJyb190aXR1bG8nKSxcbiAgICAgICAgICAgICAgICBkZXRhaWw6IG1lc3NhZ2VcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5lcnJvci5lbWl0KHsgb3BlcmFjYW86ICdzYXZlJywgbWVzc2FnZSB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGN0eCA9IHRoaXMubG9hZGVkQ29udGV4dDtcbiAgICAgICAgaWYgKCFjdHg/LmUwNzBmaWw/LmlkIHx8ICFjdHg/LmNyaVJhdCkge1xuICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VycHgucmF0ZWlvX2VkaXRvci5lcnJvX2NvbnRleHRvX2luY29tcGxldG8nKTtcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHtcbiAgICAgICAgICAgICAgICBzZXZlcml0eTogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICBzdW1tYXJ5OiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlcnB4LnJhdGVpb19lZGl0b3IuZXJyb190aXR1bG8nKSxcbiAgICAgICAgICAgICAgICBkZXRhaWw6IG1lc3NhZ2VcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5lcnJvci5lbWl0KHsgb3BlcmFjYW86ICdzYXZlJywgbWVzc2FnZSB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlucHV0OiBHcmF2YXJSYXRlaW9NYW51YWxJbnB1dCA9IHtcbiAgICAgICAgICAgIGlkTW92aW1lbnRvOiB0aGlzLmlkTW92aW1lbnRvLFxuICAgICAgICAgICAgdGlwb01vdmltZW50bzogdGhpcy50aXBvTW92aW1lbnRvLFxuICAgICAgICAgICAgYWdydXBhZG9ySWQ6IGN0eC5hZ3J1cGFkb3JJZCxcbiAgICAgICAgICAgIGUwNzBmaWxfaWQ6IGN0eC5lMDcwZmlsLmlkLFxuICAgICAgICAgICAgY3JpdGVyaW9SYXRlaW86IGN0eC5jcmlSYXQsXG4gICAgICAgICAgICBkYXRhQmFzZTogY3R4LmRhdGFCYXNlLFxuICAgICAgICAgICAgZGF0YU1vdmltZW50bzogY3R4LmRhdGFNb3ZpbWVudG8sXG4gICAgICAgICAgICByYXRlaW9zOiB0aGlzLmNvbnRhc0RhdGFTb3VyY2VcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLnNlcnZpY2UuZ3JhdmFyUmF0ZWlvTWFudWFsKGlucHV0KVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksIGZpbmFsaXplKCgpID0+ICh0aGlzLmxvYWRpbmcgPSBmYWxzZSkpKVxuICAgICAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldmVyaXR5OiAnc3VjY2VzcycsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdW1tYXJ5OiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlcnB4LnJhdGVpb19lZGl0b3Iuc2Fsdm9fY29tX3N1Y2Vzc29fdGl0dWxvJyksXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VycHgucmF0ZWlvX2VkaXRvci5zYWx2b19jb21fc3VjZXNzb19kZXRhbGhlJylcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2F2ZS5lbWl0KHsgaWRNb3ZpbWVudG86IHRoaXMuaWRNb3ZpbWVudG8sIHRpcG9Nb3ZpbWVudG86IHRoaXMudGlwb01vdmltZW50bywgcmF0ZWlvczogdGhpcy5jb250YXNEYXRhU291cmNlIH0pO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgKGVycikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkZXRhaWwgPSBlcnI/LmVycm9yPy5tZXNzYWdlIHx8IGVycj8ubWVzc2FnZSB8fCB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlcnB4LnJhdGVpb19lZGl0b3IuZXJyb19zYWx2YXInKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V2ZXJpdHk6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdW1tYXJ5OiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlcnB4LnJhdGVpb19lZGl0b3IuZXJyb190aXR1bG8nKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvci5lbWl0KHsgb3BlcmFjYW86ICdzYXZlJywgbWVzc2FnZTogZGV0YWlsLCBvcmlnaW5hbEVycm9yOiBlcnIgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25TdWdlcmlyKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5lZmZlY3RpdmVSZWFkT25seSB8fCAhdGhpcy5zaG93U3VnZXN0YW9CdXR0b24pIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5sb2FkZWRDb250ZXh0O1xuICAgICAgICBjb25zdCBlMDcwZmlsX2lkID0gdGhpcy5maWxpYWxJZCB8fCBjdHg/LmUwNzBmaWw/LmlkO1xuICAgICAgICBjb25zdCBjcml0ZXJpbyA9IHRoaXMuY3JpUmF0IHx8IGN0eD8uY3JpUmF0O1xuICAgICAgICBjb25zdCB2YWxvckJhc2UgPSBjdHg/LnZhbG9yQmFzZSA/PyAwO1xuXG4gICAgICAgIGlmICghZTA3MGZpbF9pZCB8fCAhY3JpdGVyaW8pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBhcmFtZXRybzogU3VnZXJpclJhdGVpb1BhcmFtZXRybyA9IHtcbiAgICAgICAgICAgIGUwNzBmaWxfaWQsXG4gICAgICAgICAgICB2YWxvckJhc2UsXG4gICAgICAgICAgICBjcmlSYXQ6IGNyaXRlcmlvLFxuICAgICAgICAgICAgZGF0YUJhc2U6IGN0eD8uZGF0YUJhc2UsXG4gICAgICAgICAgICBkYXRhTW92aW1lbnRvOiBjdHg/LmRhdGFNb3ZpbWVudG9cbiAgICAgICAgfTtcblxuICAgICAgICBpZiAodGhpcy5pZE1vdmltZW50bykge1xuICAgICAgICAgICAgcGFyYW1ldHJvLmlkTW92aW1lbnRvID0gdGhpcy5pZE1vdmltZW50bztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5lMDkxcGxmSWQpIHtcbiAgICAgICAgICAgIHBhcmFtZXRyby5lMDkxcGxmX2lkID0gdGhpcy5lMDkxcGxmSWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZTA0NGNjdUlkKSB7XG4gICAgICAgICAgICBwYXJhbWV0cm8uZTA0NGNjdV9pZCA9IHRoaXMuZTA0NGNjdUlkO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlkVHJhbnNhY2FvKSB7XG4gICAgICAgICAgICBwYXJhbWV0cm8uaWRUcmFuc2FjYW8gPSB0aGlzLmlkVHJhbnNhY2FvO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlkRmFtaWxpYSkge1xuICAgICAgICAgICAgcGFyYW1ldHJvLmlkRmFtaWxpYSA9IHRoaXMuaWRGYW1pbGlhO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlkRGVyaXZhY2FvKSB7XG4gICAgICAgICAgICBwYXJhbWV0cm8uaWREZXJpdmFjYW8gPSB0aGlzLmlkRGVyaXZhY2FvO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlkU2Vydmljbykge1xuICAgICAgICAgICAgcGFyYW1ldHJvLmlkU2VydmljbyA9IHRoaXMuaWRTZXJ2aWNvO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnZhbG9yRXhjZWRlbnRlICE9IG51bGwpIHtcbiAgICAgICAgICAgIHBhcmFtZXRyby52YWxvckV4Y2VkZW50ZSA9IHRoaXMudmFsb3JFeGNlZGVudGU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpbnB1dDogU3VnZXJpclJhdGVpb0lucHV0ID0ge1xuICAgICAgICAgICAgdGlwbzogdGhpcy50aXBvTW92aW1lbnRvLFxuICAgICAgICAgICAgcGFyYW1ldHJvczogW3BhcmFtZXRyb11cbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLnNlcnZpY2Uuc3VnZXJpclJhdGVpbyhpbnB1dClcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLCBmaW5hbGl6ZSgoKSA9PiAodGhpcy5sb2FkaW5nID0gZmFsc2UpKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgICAgKHJlc3ApID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3VnZXN0YW8gPSAocmVzcC5zdWdlc3RhbyB8fCBbXSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5maW5kKHMgPT4gIXRoaXMuaWRNb3ZpbWVudG8gfHwgcy5pZE1vdmltZW50byA9PT0gdGhpcy5pZE1vdmltZW50bylcbiAgICAgICAgICAgICAgICAgICAgICAgIHx8IChyZXNwLnN1Z2VzdGFvIHx8IFtdKVswXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmF0ZWlvID0gc3VnZXN0YW8/LnJhdGVpbztcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFzdWdlc3RhbyB8fCAhcmF0ZWlvIHx8IHJhdGVpby5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBvcHVsYXJDb21SYXRlaW9zKHJhdGVpbyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdENoYW5nZSgpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgKGVycikgPT4gdGhpcy5lcnJvci5lbWl0KHsgb3BlcmFjYW86ICdzdWdnZXN0JywgbWVzc2FnZTogZXJyPy5lcnJvcj8ubWVzc2FnZSB8fCBlcnI/Lm1lc3NhZ2UgfHwgdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZXJweC5yYXRlaW9fZWRpdG9yLmVycm9fc3VnZXJpcicpLCBvcmlnaW5hbEVycm9yOiBlcnIgfSlcbiAgICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gPT09IE1PREFMIENPTlRBIEZJTkFOQ0VJUkEgPT09XG5cbiAgICBwdWJsaWMgb3BlbkNvbnRhRGlhbG9nKGVkaXRJbmRleD86IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLmVkaXRpbmdDb250YUluZGV4ID0gZWRpdEluZGV4ICE9IG51bGwgPyBlZGl0SW5kZXggOiBudWxsO1xuICAgICAgICBjb25zdCByZW1haW5pbmdQY3QgPSB0aGlzLmVkaXRpbmdDb250YUluZGV4ICE9IG51bGxcbiAgICAgICAgICAgID8gdGhpcy5wZXJjZW50dWFsUmVzdGFudGUgKyB0aGlzLmNvbnRhc0RhdGFTb3VyY2VbdGhpcy5lZGl0aW5nQ29udGFJbmRleF0ucGVyY2VudHVhbFxuICAgICAgICAgICAgOiB0aGlzLnBlcmNlbnR1YWxSZXN0YW50ZTtcbiAgICAgICAgLy8gVXNhIG8gdmFsb3IgcmVzdGFudGUgcmVhbCBlbSB2ZXogZGUgcmVjYWxjdWxhciB2aWEgcGVyY2VudHVhbCwgZXZpdGFuZG9cbiAgICAgICAgLy8gZGlmZXJlbsOnYXMgZGUgYXJyZWRvbmRhbWVudG8gYWN1bXVsYWRhcyBuYXMgZW50cmFkYXMgYW50ZXJpb3Jlcy5cbiAgICAgICAgY29uc3QgcmVtYWluaW5nVmFsb3IgPSB0aGlzLmVkaXRpbmdDb250YUluZGV4ICE9IG51bGxcbiAgICAgICAgICAgID8gKyh0aGlzLnZhbG9yUmVzdGFudGUgKyB0aGlzLmNvbnRhc0RhdGFTb3VyY2VbdGhpcy5lZGl0aW5nQ29udGFJbmRleF0udmFsb3JSYXRlYWRvQ29udGEpLnRvRml4ZWQodGhpcy5jb25maWcuY3VycmVuY3lTY2FsZSA/PyAyKVxuICAgICAgICAgICAgOiB0aGlzLnZhbG9yUmVzdGFudGU7XG5cbiAgICAgICAgbGV0IGNvbnRhVmFsdWUgPSBudWxsO1xuICAgICAgICBsZXQgcGVyY2VudHVhbFZhbHVlOiBudW1iZXIgfCBudWxsID0gcmVtYWluaW5nUGN0ID4gMCA/IHJlbWFpbmluZ1BjdCA6IG51bGw7XG4gICAgICAgIGxldCB2YWxvclZhbHVlOiBudW1iZXIgfCBudWxsID0gcGVyY2VudHVhbFZhbHVlICE9IG51bGwgPyByZW1haW5pbmdWYWxvciA6IG51bGw7XG5cbiAgICAgICAgaWYgKHRoaXMuZWRpdGluZ0NvbnRhSW5kZXggIT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgY29udGEgPSB0aGlzLmNvbnRhc0RhdGFTb3VyY2VbdGhpcy5lZGl0aW5nQ29udGFJbmRleF07XG4gICAgICAgICAgICBjb250YVZhbHVlID0geyBpZDogY29udGEuaWRDb250YUZpbmFuY2VpcmEsIGxhYmVsOiBjb250YS5jb250YUZpbmFuY2VpcmEgfTtcbiAgICAgICAgICAgIHBlcmNlbnR1YWxWYWx1ZSA9IGNvbnRhLnBlcmNlbnR1YWw7XG4gICAgICAgICAgICB2YWxvclZhbHVlID0gY29udGEudmFsb3JSYXRlYWRvQ29udGE7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNlbGVjdGVkQ29udGEgPSBjb250YVZhbHVlIGFzIENvbnRhRmluYW5jZWlyYUxvb2t1cCB8IG51bGw7XG4gICAgICAgIHRoaXMuY29udGFEaWFsb2dGb3JtR3JvdXAgPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgICAgICAgIGNvbnRhRmluYW5jZWlyYTogW3sgdmFsdWU6IGNvbnRhVmFsdWUsIGRpc2FibGVkOiB0aGlzLmVkaXRpbmdDb250YUluZGV4ICE9IG51bGwgfSwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICAgICAgICBwZXJjZW50dWFsOiBbeyB2YWx1ZTogcGVyY2VudHVhbFZhbHVlLCBkaXNhYmxlZDogZmFsc2UgfSwgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWF4KHJlbWFpbmluZ1BjdCldXSxcbiAgICAgICAgICAgIHZhbG9yOiBbeyB2YWx1ZTogdmFsb3JWYWx1ZSwgZGlzYWJsZWQ6IGZhbHNlIH0sIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1heChyZW1haW5pbmdWYWxvcildXVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jb250YURpYWxvZ0Zvcm1Hcm91cC5nZXQoJ2NvbnRhRmluYW5jZWlyYScpLnZhbHVlQ2hhbmdlc1xuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCh2YWx1ZTogQ29udGFGaW5hbmNlaXJhTG9va3VwKSA9PiAodGhpcy5zZWxlY3RlZENvbnRhID0gdmFsdWUgfHwgbnVsbCkpO1xuICAgICAgICB0aGlzLnNldHVwUGVyY2VudHVhbFZhbG9yU3luYyh0aGlzLmNvbnRhRGlhbG9nRm9ybUdyb3VwLCAoKSA9PiB0aGlzLnZhbG9yQmFzZSk7XG4gICAgICAgIHRoaXMuY29udGFEaWFsb2dGaWVsZHMgPSB0aGlzLmdldENvbnRhRGlhbG9nRmllbGRzKCk7XG4gICAgICAgIHRoaXMuZGlzcGxheUNvbnRhRGlhbG9nID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25TYXZlQ29udGFEaWFsb2coKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRhRGlhbG9nRm9ybUdyb3VwLmludmFsaWQpIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgY29uc3QgY29udGFDb250cm9sID0gdGhpcy5jb250YURpYWxvZ0Zvcm1Hcm91cC5nZXQoJ2NvbnRhRmluYW5jZWlyYScpO1xuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5jb250YURpYWxvZ0Zvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpO1xuICAgICAgICBjb25zdCBjb250YUZpbmFuY2VpcmEgPSBkYXRhLmNvbnRhRmluYW5jZWlyYTtcbiAgICAgICAgY29uc3QgcGVyY2VudHVhbCA9IE51bWJlcihkYXRhLnBlcmNlbnR1YWwpIHx8IDA7XG4gICAgICAgIGNvbnN0IHZhbG9yID0gKyhOdW1iZXIoZGF0YS52YWxvcikgfHwgMCkudG9GaXhlZCh0aGlzLmNvbmZpZy5jdXJyZW5jeVNjYWxlID8/IDIpO1xuICAgICAgICBjb25zdCBpZENvbnRhRmluYW5jZWlyYSA9IHRoaXMuc2VsZWN0ZWRDb250YT8uaWQgfHwgY29udGFGaW5hbmNlaXJhPy5pZCB8fCAnJztcblxuICAgICAgICAvLyBWYWxpZGHDp8OjbyBhbmFsw610aWNhOiBjb250YSBzaW50w6l0aWNhIG7Do28gcG9kZSBzZXIgdXNhZGEgbm8gcmF0ZWlvXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkQ29udGE/LmFuYVNpbiA9PT0gRXJwUmF0ZWlvRWRpdG9yQ29tcG9uZW50LkFOQV9TSU5fU0lOVEVUSUNPKSB7XG4gICAgICAgICAgICBjb250YUNvbnRyb2wuc2V0RXJyb3JzKHsgY29udGFTaW50ZXRpY2E6IHRydWUgfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBWYWxpZGHDp8OjbyBkZSBkdXBsaWNpZGFkZSAoYWRpw6fDo28gZSBlZGnDp8OjbywgaWdub3JhbmRvIG8gaXRlbSBlbSBlZGnDp8OjbylcbiAgICAgICAgY29uc3QgZHVwbGljYWRhID0gdGhpcy5jb250YXNEYXRhU291cmNlLnNvbWUoXG4gICAgICAgICAgICAoYywgaSkgPT4gaSAhPT0gdGhpcy5lZGl0aW5nQ29udGFJbmRleCAmJiBjLmlkQ29udGFGaW5hbmNlaXJhID09PSBpZENvbnRhRmluYW5jZWlyYVxuICAgICAgICApO1xuICAgICAgICBpZiAoZHVwbGljYWRhKSB7XG4gICAgICAgICAgICBjb250YUNvbnRyb2wuc2V0RXJyb3JzKHsgZHVwbGljYXRlOiB0cnVlIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuZWRpdGluZ0NvbnRhSW5kZXggIT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgY29udGEgPSB0aGlzLmNvbnRhc0RhdGFTb3VyY2VbdGhpcy5lZGl0aW5nQ29udGFJbmRleF07XG4gICAgICAgICAgICBjb250YS5wZXJjZW50dWFsID0gcGVyY2VudHVhbDtcbiAgICAgICAgICAgIGNvbnRhLnZhbG9yUmF0ZWFkb0NvbnRhID0gdmFsb3I7XG4gICAgICAgICAgICAvLyBSZWNhbGN1bGEgb3MgdmFsb3JlcyBkb3MgQ0NzIHByb3BvcmNpb25hbG1lbnRlIGFvIG5vdm8gdmFsb3IgZGEgY29udGEsXG4gICAgICAgICAgICAvLyBtYW50ZW5kbyBvcyBwZXJjZW50dWFpcyBpbnRhY3Rvcy5cbiAgICAgICAgICAgIGlmIChjb250YS5yYXRlaW9zQ0N1c3RvPy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW5jeVNjYWxlID0gdGhpcy5jb25maWcuY3VycmVuY3lTY2FsZSA/PyAyO1xuICAgICAgICAgICAgICAgIGNvbnRhLnJhdGVpb3NDQ3VzdG8gPSBjb250YS5yYXRlaW9zQ0N1c3RvLm1hcChjYyA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAuLi5jYyxcbiAgICAgICAgICAgICAgICAgICAgdmFsb3I6ICsoKGNjLnBlcmNlbnR1YWwgLyAxMDApICogdmFsb3IpLnRvRml4ZWQoY3VycmVuY3lTY2FsZSlcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNvbnRhc0RhdGFTb3VyY2UgPSBbLi4udGhpcy5jb250YXNEYXRhU291cmNlXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGxhYmVsQ29udGEgPSBjb250YUZpbmFuY2VpcmE/LmxhYmVsIHx8ICcnO1xuICAgICAgICAgICAgY29uc3Qgbm92YUNvbnRhOiBSYXRlaW9Db250YSA9IHtcbiAgICAgICAgICAgICAgICBpZENvbnRhRmluYW5jZWlyYSxcbiAgICAgICAgICAgICAgICBjb250YUZpbmFuY2VpcmE6IGxhYmVsQ29udGEsXG4gICAgICAgICAgICAgICAgcGVyY2VudHVhbCxcbiAgICAgICAgICAgICAgICB2YWxvclJhdGVhZG9Db250YTogdmFsb3IsXG4gICAgICAgICAgICAgICAgcmF0ZWlvc0NDdXN0bzogW11cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLmNvbnRhc0RhdGFTb3VyY2UgPSBbLi4udGhpcy5jb250YXNEYXRhU291cmNlLCBub3ZhQ29udGFdO1xuICAgICAgICAgICAgdGhpcy5jY1NlbGVjdGlvbltub3ZhQ29udGEuaWRDb250YUZpbmFuY2VpcmFdID0gW107XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmRpc3BsYXlDb250YURpYWxvZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmVtaXRDaGFuZ2UoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25IaWRlQ29udGFEaWFsb2coKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlzcGxheUNvbnRhRGlhbG9nID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gPT09IE1PREFMIENFTlRSTyBERSBDVVNUTyA9PT1cblxuICAgIHB1YmxpYyBvcGVuQ0NEaWFsb2coY29udGFJbmRleDogbnVtYmVyLCBlZGl0Q0NJbmRleD86IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLmVkaXRpbmdDQ0NvbnRhSW5kZXggPSBjb250YUluZGV4O1xuICAgICAgICB0aGlzLmVkaXRpbmdDQ0luZGV4ID0gZWRpdENDSW5kZXggIT0gbnVsbCA/IGVkaXRDQ0luZGV4IDogbnVsbDtcblxuICAgICAgICBjb25zdCBjb250YSA9IHRoaXMuY29udGFzRGF0YVNvdXJjZVtjb250YUluZGV4XTtcbiAgICAgICAgY29uc3QgY2NMaXN0ID0gY29udGEucmF0ZWlvc0NDdXN0byB8fCBbXTtcbiAgICAgICAgY29uc3QgdmFsb3JCYXNlQ0MgPSBjb250YS52YWxvclJhdGVhZG9Db250YSB8fCAwO1xuXG4gICAgICAgIC8vIENhbGN1bGEgbyByZXN0YW50ZSBleGNsdWluZG8gbyBpdGVtIGVtIGVkacOnw6NvIChwYXJhIHF1ZSBlZGnDp8OjbyBwb3NzYSBtYW50ZXIgbyBwcsOzcHJpbyB2YWxvcilcbiAgICAgICAgY29uc3Qgc29tYUNDUGN0ID0gY2NMaXN0LnJlZHVjZSgoYWNjLCBjYywgaSkgPT4gYWNjICsgKGkgPT09IHRoaXMuZWRpdGluZ0NDSW5kZXggPyAwIDogKGNjLnBlcmNlbnR1YWwgfHwgMCkpLCAwKTtcbiAgICAgICAgY29uc3Qgc29tYUNDVmFsb3IgPSBjY0xpc3QucmVkdWNlKChhY2MsIGNjLCBpKSA9PiBhY2MgKyAoaSA9PT0gdGhpcy5lZGl0aW5nQ0NJbmRleCA/IDAgOiAoY2MudmFsb3IgfHwgMCkpLCAwKTtcbiAgICAgICAgY29uc3QgcmVtYWluaW5nUGN0ID0gKygxMDAgLSBzb21hQ0NQY3QpLnRvRml4ZWQodGhpcy5jb25maWcucGVyY2VudGFnZVNjYWxlID8/IDQpO1xuICAgICAgICBjb25zdCByZW1haW5pbmdWYWxvciA9ICsodmFsb3JCYXNlQ0MgLSBzb21hQ0NWYWxvcikudG9GaXhlZCh0aGlzLmNvbmZpZy5jdXJyZW5jeVNjYWxlID8/IDIpO1xuXG4gICAgICAgIGxldCBjY1ZhbHVlID0gbnVsbDtcbiAgICAgICAgbGV0IHBlcmNlbnR1YWxWYWx1ZTogbnVtYmVyIHwgbnVsbCA9IHJlbWFpbmluZ1BjdCA+IDAgPyByZW1haW5pbmdQY3QgOiBudWxsO1xuICAgICAgICAvLyBVc2EgbyB2YWxvciByZXN0YW50ZSByZWFsIChqw6EgY2FsY3VsYWRvIGFjaW1hKSBlbSB2ZXogZGUgcmVjYWxjdWxhciB2aWEgcGVyY2VudHVhbCxcbiAgICAgICAgLy8gZXZpdGFuZG8gZGlmZXJlbsOnYXMgZGUgYXJyZWRvbmRhbWVudG8gYWN1bXVsYWRhcyBub3MgQ0NzIGFudGVyaW9yZXMuXG4gICAgICAgIGxldCB2YWxvclZhbHVlOiBudW1iZXIgfCBudWxsID0gcGVyY2VudHVhbFZhbHVlICE9IG51bGwgPyByZW1haW5pbmdWYWxvciA6IG51bGw7XG5cbiAgICAgICAgaWYgKHRoaXMuZWRpdGluZ0NDSW5kZXggIT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgY2MgPSBjY0xpc3RbdGhpcy5lZGl0aW5nQ0NJbmRleF07XG4gICAgICAgICAgICBjY1ZhbHVlID0geyBpZDogY2MuaWRDZW50cm9DdXN0bywgbGFiZWw6IGNjLmRlc2NDQ3VzdG8gfHwgY2MuaWRDZW50cm9DdXN0byB9O1xuICAgICAgICAgICAgcGVyY2VudHVhbFZhbHVlID0gY2MucGVyY2VudHVhbDtcbiAgICAgICAgICAgIHZhbG9yVmFsdWUgPSBjYy52YWxvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG1heFBjdDogcGVyY2VudHVhbCBtw6F4aW1vIHF1ZSBlc3RlIENDIHBvZGUgdGVyIChuw6NvIHBvZGUgdWx0cmFwYXNzYXIgbyByZXN0YW50ZSBkYSBjb250YSlcbiAgICAgICAgY29uc3QgbWF4UGN0ID0gcmVtYWluaW5nUGN0O1xuICAgICAgICAvLyBtYXhWYWxvcjogdmFsb3IgbcOheGltbyBxdWUgZXN0ZSBDQyBwb2RlIHRlciAobsOjbyBwb2RlIHVsdHJhcGFzc2FyIG8gcmVzdGFudGUgZW0gZGluaGVpcm8pXG4gICAgICAgIGNvbnN0IG1heFZhbG9yID0gcmVtYWluaW5nVmFsb3I7XG5cbiAgICAgICAgdGhpcy5zZWxlY3RlZENDID0gY2NWYWx1ZSBhcyBDZW50cm9DdXN0b0xvb2t1cCB8IG51bGw7XG4gICAgICAgIHRoaXMuY2NEaWFsb2dGb3JtR3JvdXAgPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgICAgICAgIGNlbnRyb0N1c3RvOiBbeyB2YWx1ZTogY2NWYWx1ZSwgZGlzYWJsZWQ6IHRoaXMuZWRpdGluZ0NDSW5kZXggIT0gbnVsbCB9LCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgICAgICAgIHBlcmNlbnR1YWw6IFt7IHZhbHVlOiBwZXJjZW50dWFsVmFsdWUsIGRpc2FibGVkOiBmYWxzZSB9LCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5tYXgobWF4UGN0KV1dLFxuICAgICAgICAgICAgdmFsb3I6IFt7IHZhbHVlOiB2YWxvclZhbHVlLCBkaXNhYmxlZDogZmFsc2UgfSwgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWF4KG1heFZhbG9yKV1dXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNjRGlhbG9nRm9ybUdyb3VwLmdldCgnY2VudHJvQ3VzdG8nKS52YWx1ZUNoYW5nZXNcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgodmFsdWU6IENlbnRyb0N1c3RvTG9va3VwKSA9PiAodGhpcy5zZWxlY3RlZENDID0gdmFsdWUgfHwgbnVsbCkpO1xuICAgICAgICB0aGlzLnNldHVwUGVyY2VudHVhbFZhbG9yU3luYyh0aGlzLmNjRGlhbG9nRm9ybUdyb3VwLCAoKSA9PiB2YWxvckJhc2VDQyk7XG4gICAgICAgIHRoaXMuY2NEaWFsb2dGaWVsZHMgPSB0aGlzLmdldENDRGlhbG9nRmllbGRzKCk7XG4gICAgICAgIHRoaXMuZGlzcGxheUNDRGlhbG9nID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25TYXZlQ0NEaWFsb2coKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmNjRGlhbG9nRm9ybUdyb3VwLmludmFsaWQpIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgY29uc3QgY2NDb250cm9sID0gdGhpcy5jY0RpYWxvZ0Zvcm1Hcm91cC5nZXQoJ2NlbnRyb0N1c3RvJyk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmNjRGlhbG9nRm9ybUdyb3VwLmdldFJhd1ZhbHVlKCk7XG4gICAgICAgIGNvbnN0IGNlbnRyb0N1c3RvID0gZGF0YS5jZW50cm9DdXN0bztcbiAgICAgICAgY29uc3QgcGVyY2VudHVhbCA9IE51bWJlcihkYXRhLnBlcmNlbnR1YWwpIHx8IDA7XG4gICAgICAgIGNvbnN0IHZhbG9yID0gKyhOdW1iZXIoZGF0YS52YWxvcikgfHwgMCkudG9GaXhlZCh0aGlzLmNvbmZpZy5jdXJyZW5jeVNjYWxlID8/IDIpO1xuICAgICAgICBjb25zdCBjb250YSA9IHRoaXMuY29udGFzRGF0YVNvdXJjZVt0aGlzLmVkaXRpbmdDQ0NvbnRhSW5kZXhdO1xuICAgICAgICBjb25zdCBpZENlbnRyb0N1c3RvID0gdGhpcy5zZWxlY3RlZENDPy5pZCB8fCBjZW50cm9DdXN0bz8uaWQgfHwgJyc7XG5cbiAgICAgICAgLy8gVmFsaWRhw6fDo28gYW5hbMOtdGljYTogQ0Mgc2ludMOpdGljbyBvdSBxdWUgbsOjbyBhY2VpdGEgcmF0ZWlvIMOpIGludsOhbGlkb1xuICAgICAgICBjb25zdCBjY0ludmFsaWRvID0gdGhpcy5zZWxlY3RlZENDPy5hY2VSYXQgPT09IGZhbHNlXG4gICAgICAgICAgICB8fCB0aGlzLnNlbGVjdGVkQ0M/LmFuYVNpbiA9PT0gRXJwUmF0ZWlvRWRpdG9yQ29tcG9uZW50LkFOQV9TSU5fU0lOVEVUSUNPO1xuICAgICAgICBpZiAoY2NJbnZhbGlkbykge1xuICAgICAgICAgICAgY2NDb250cm9sLnNldEVycm9ycyh7IGNlbnRyb0N1c3RvSW52YWxpZG86IHRydWUgfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBWYWxpZGHDp8OjbyBkZSBkdXBsaWNpZGFkZSBuYSBtZXNtYSBjb250YSAoYWRpw6fDo28gZSBlZGnDp8OjbywgaWdub3JhbmRvIG8gaXRlbSBlbSBlZGnDp8OjbylcbiAgICAgICAgY29uc3QgY2NMaXN0ID0gY29udGEucmF0ZWlvc0NDdXN0byB8fCBbXTtcbiAgICAgICAgY29uc3QgZHVwbGljYWRvID0gY2NMaXN0LnNvbWUoXG4gICAgICAgICAgICAoY2MsIGkpID0+IGkgIT09IHRoaXMuZWRpdGluZ0NDSW5kZXggJiYgY2MuaWRDZW50cm9DdXN0byA9PT0gaWRDZW50cm9DdXN0b1xuICAgICAgICApO1xuICAgICAgICBpZiAoZHVwbGljYWRvKSB7XG4gICAgICAgICAgICBjY0NvbnRyb2wuc2V0RXJyb3JzKHsgZHVwbGljYXRlOiB0cnVlIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuZWRpdGluZ0NDSW5kZXggIT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgY2MgPSBjb250YS5yYXRlaW9zQ0N1c3RvW3RoaXMuZWRpdGluZ0NDSW5kZXhdO1xuICAgICAgICAgICAgY2MucGVyY2VudHVhbCA9IHBlcmNlbnR1YWw7XG4gICAgICAgICAgICBjYy52YWxvciA9IHZhbG9yO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgbGFiZWxDQ3VzdG8gPSBjZW50cm9DdXN0bz8ubGFiZWwgfHwgJyc7XG4gICAgICAgICAgICBjb250YS5yYXRlaW9zQ0N1c3RvID0gWy4uLmNjTGlzdCwgeyBpZENlbnRyb0N1c3RvLCBkZXNjQ0N1c3RvOiBsYWJlbENDdXN0bywgcGVyY2VudHVhbCwgdmFsb3IgfV07XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbnRhc0RhdGFTb3VyY2UgPSBbLi4udGhpcy5jb250YXNEYXRhU291cmNlXTtcbiAgICAgICAgdGhpcy5kaXNwbGF5Q0NEaWFsb2cgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5lbWl0Q2hhbmdlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uSGlkZUNDRGlhbG9nKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRpc3BsYXlDQ0RpYWxvZyA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vID09PSBBw4fDlUVTIERBIFRBQkVMQSA9PT1cblxuICAgIHB1YmxpYyBvbkRlbGV0ZVNlbGVjdGVkKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0aW9uLmxlbmd0aCkgeyByZXR1cm47IH1cbiAgICAgICAgY29uc3QgaWRzVG9SZW1vdmUgPSBuZXcgU2V0KHRoaXMuc2VsZWN0aW9uLm1hcChzID0+IHMuaWRDb250YUZpbmFuY2VpcmEpKTtcbiAgICAgICAgdGhpcy5jb250YXNEYXRhU291cmNlID0gdGhpcy5jb250YXNEYXRhU291cmNlLmZpbHRlcihjID0+ICFpZHNUb1JlbW92ZS5oYXMoYy5pZENvbnRhRmluYW5jZWlyYSkpO1xuICAgICAgICBpZHNUb1JlbW92ZS5mb3JFYWNoKGlkID0+IGRlbGV0ZSB0aGlzLmNjU2VsZWN0aW9uW2lkXSk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uID0gW107XG4gICAgICAgIHRoaXMuZW1pdENoYW5nZSgpO1xuICAgIH1cblxuICAgIC8qKiBSZW1vdmUgb3MgY2VudHJvcyBkZSBjdXN0byBzZWxlY2lvbmFkb3MgZGUgdW1hIGNvbnRhIGZpbmFuY2VpcmEuICovXG4gICAgcHVibGljIG9uRGVsZXRlU2VsZWN0ZWRDQyhjb250YTogUmF0ZWlvQ29udGEpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc2VsZWNpb25hZG9zID0gdGhpcy5jY1NlbGVjdGlvbltjb250YS5pZENvbnRhRmluYW5jZWlyYV0gfHwgW107XG4gICAgICAgIGlmICghc2VsZWNpb25hZG9zLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoe1xuICAgICAgICAgICAgICAgIHNldmVyaXR5OiAnd2FybicsXG4gICAgICAgICAgICAgICAgc3VtbWFyeTogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZXJweC5yYXRlaW9fZWRpdG9yLmVycm9fdGl0dWxvJyksXG4gICAgICAgICAgICAgICAgZGV0YWlsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlcnB4LnJhdGVpb19lZGl0b3IubmVuaHVtX2NlbnRyb19jdXN0b19zZWxlY2lvbmFkbycpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpZHNUb1JlbW92ZSA9IG5ldyBTZXQoc2VsZWNpb25hZG9zLm1hcChjYyA9PiBjYy5pZENlbnRyb0N1c3RvKSk7XG4gICAgICAgIGNvbnRhLnJhdGVpb3NDQ3VzdG8gPSBjb250YS5yYXRlaW9zQ0N1c3RvLmZpbHRlcihjYyA9PiAhaWRzVG9SZW1vdmUuaGFzKGNjLmlkQ2VudHJvQ3VzdG8pKTtcbiAgICAgICAgdGhpcy5jY1NlbGVjdGlvbltjb250YS5pZENvbnRhRmluYW5jZWlyYV0gPSBbXTtcbiAgICAgICAgdGhpcy5jb250YXNEYXRhU291cmNlID0gWy4uLnRoaXMuY29udGFzRGF0YVNvdXJjZV07XG4gICAgICAgIHRoaXMuZW1pdENoYW5nZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmVyQ29udGEoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCByZW1vdmlkYSA9IHRoaXMuY29udGFzRGF0YVNvdXJjZVtpbmRleF07XG4gICAgICAgIGlmIChyZW1vdmlkYSkgeyBkZWxldGUgdGhpcy5jY1NlbGVjdGlvbltyZW1vdmlkYS5pZENvbnRhRmluYW5jZWlyYV07IH1cbiAgICAgICAgdGhpcy5jb250YXNEYXRhU291cmNlID0gdGhpcy5jb250YXNEYXRhU291cmNlLmZpbHRlcigoXywgaSkgPT4gaSAhPT0gaW5kZXgpO1xuICAgICAgICB0aGlzLmVtaXRDaGFuZ2UoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlckNlbnRyb0N1c3RvKGNvbnRhSW5kZXg6IG51bWJlciwgY2NJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbnRhID0gdGhpcy5jb250YXNEYXRhU291cmNlW2NvbnRhSW5kZXhdO1xuICAgICAgICBjb250YS5yYXRlaW9zQ0N1c3RvID0gY29udGEucmF0ZWlvc0NDdXN0by5maWx0ZXIoKF8sIGkpID0+IGkgIT09IGNjSW5kZXgpO1xuICAgICAgICB0aGlzLmNvbnRhc0RhdGFTb3VyY2UgPSBbLi4udGhpcy5jb250YXNEYXRhU291cmNlXTtcbiAgICAgICAgdGhpcy5lbWl0Q2hhbmdlKCk7XG4gICAgfVxuXG5cbiAgICBwdWJsaWMgZ2V0Q29udGFJbmRleChyb3dEYXRhOiBSYXRlaW9Db250YSk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRhc0RhdGFTb3VyY2UuaW5kZXhPZihyb3dEYXRhKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q0NJbmRleChjb250YTogUmF0ZWlvQ29udGEsIGNjOiBSYXRlaW9DQ3VzdG8pOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gKGNvbnRhLnJhdGVpb3NDQ3VzdG8gfHwgW10pLmluZGV4T2YoY2MpO1xuICAgIH1cblxuICAgIC8vID09PSBQUklWQURPUyA9PT1cblxuICAgIC8qKiBJbmljaWFsaXphIG8gY29tcG9uZW50ZSBhIHBhcnRpciBkb3MgaW5wdXRzIChzZW0gY2hhbWFkYSDDoCBBUEkgZGUgY2FyZ2EpLiAqL1xuICAgIHByaXZhdGUgaW5pY2lhbGl6YXJQb3JJbnB1dHMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubG9hZGVkQ29udGV4dCA9ICh0aGlzLmluaXRpYWxDb250ZXh0IHx8IHt9KSBhcyBSZXRvcm5hclJhdGVpb091dHB1dDtcbiAgICAgICAgdGhpcy5wb3B1bGFyQ29tUmF0ZWlvcyh0aGlzLmluaXRpYWxSYXRlaW9zIHx8IFtdKTtcbiAgICAgICAgaWYgKCF0aGlzLmVtcHJlc2FJZCkge1xuICAgICAgICAgICAgdGhpcy5lbXByZXNhSWQgPSB0aGlzLmluaXRpYWxDb250ZXh0Py5lMDcwZmlsPy5lMDcwZW1wPy5pZDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdyaWRDb2x1bW5zID0gdGhpcy5nZXRHcmlkQ29sdW1ucygpO1xuICAgICAgICAvLyBFbWl0ZSBvIGVzdGFkbyBkZSB2YWxpZGFkZSBqw6EgbmEgY2FyZ2EgaW5pY2lhbCAoc2VtIG1hcmNhciBjb21vIFwic3Vqb1wiKSxcbiAgICAgICAgLy8gcGVybWl0aW5kbyBxdWUgbyBob3N0IGNvbmhlw6dhIG8gaXNWYWxpZCBtZXNtbyBzZW0gbyB1c3XDoXJpbyBlZGl0YXIuXG4gICAgICAgIHRoaXMuZW1pdENoYW5nZShmYWxzZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjYXJyZWdhclJhdGVpbygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zZXJ2aWNlXG4gICAgICAgICAgICAucmV0b3JuYXJSYXRlaW8oeyBpZE1vdmltZW50bzogdGhpcy5pZE1vdmltZW50bywgdGlwb01vdmltZW50bzogdGhpcy50aXBvTW92aW1lbnRvIH0pXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSwgZmluYWxpemUoKCkgPT4gKHRoaXMubG9hZGluZyA9IGZhbHNlKSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAgIChvdXRwdXQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkZWRDb250ZXh0ID0gb3V0cHV0O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBvcHVsYXJDb21SYXRlaW9zKG91dHB1dC5yYXRlaW8gfHwgW10pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZW1wcmVzYUlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVtcHJlc2FJZCA9IG91dHB1dC5lMDcwZmlsLmUwNzBlbXAuaWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkQ29sdW1ucyA9IHRoaXMuZ2V0R3JpZENvbHVtbnMoKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gRW1pdGUgbyBlc3RhZG8gZGUgdmFsaWRhZGUgZG8gcmF0ZWlvIGNhcnJlZ2FkbyAoc2VtIG1hcmNhciBjb21vIFwic3Vqb1wiKS5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0Q2hhbmdlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIChlcnIpID0+IHRoaXMuZXJyb3IuZW1pdCh7IG9wZXJhY2FvOiAnbG9hZCcsIG1lc3NhZ2U6IGVycj8uZXJyb3I/Lm1lc3NhZ2UgfHwgZXJyPy5tZXNzYWdlIHx8IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VycHgucmF0ZWlvX2VkaXRvci5lcnJvX2NhcnJlZ2FyJyksIG9yaWdpbmFsRXJyb3I6IGVyciB9KVxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHBvcHVsYXJDb21SYXRlaW9zKHJhdGVpb3M6IFJhdGVpb0NvbnRhW10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jb250YXNEYXRhU291cmNlID0gWy4uLnJhdGVpb3NdO1xuICAgICAgICB0aGlzLmNjU2VsZWN0aW9uID0ge307XG4gICAgICAgIHRoaXMuY29udGFzRGF0YVNvdXJjZS5mb3JFYWNoKGNvbnRhID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2NTZWxlY3Rpb25bY29udGEuaWRDb250YUZpbmFuY2VpcmFdID0gW107XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERpc3RyaWJ1acOnw6NvIGNvbXBsZXRhOiByZXN0YW50ZXMgZ2xvYmFpcyBlIGRlIGNhZGEgY29udGEgaWd1YWlzIGEgemVyby5cbiAgICAgKiBFeHBvc3RvIHB1YmxpY2FtZW50ZSBwYXJhIHF1ZSBvIHRlbXBsYXRlIHBvc3NhIHJlYWdpciBhbyBlc3RhZG8gcmVhbCBkZVxuICAgICAqIGNvbXBsZXR1ZGUgKGNvbnRhcyArIGNlbnRyb3MgZGUgY3VzdG8pLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgZGlzdHJpYnVpY2FvQ29tcGxldGEoKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLnBlcmNlbnR1YWxSZXN0YW50ZSAhPT0gMCB8fCB0aGlzLnZhbG9yUmVzdGFudGUgIT09IDApIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRhc0RhdGFTb3VyY2UuZXZlcnkoY29udGEgPT4gdGhpcy5pc0NvbnRhQ0NDb21wbGV0YShjb250YSkpO1xuICAgIH1cblxuICAgIC8qKiBAZGVwcmVjYXRlZCBVc2FyIG8gZ2V0dGVyIGBkaXN0cmlidWljYW9Db21wbGV0YWAuIE1hbnRpZG8gcGFyYSBjb21wYXRpYmlsaWRhZGUgaW50ZXJuYS4gKi9cbiAgICBwcml2YXRlIGlzRGlzdHJpYnVpY2FvQ29tcGxldGEoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmRpc3RyaWJ1aWNhb0NvbXBsZXRhO1xuICAgIH1cblxuICAgIC8qKiBJbmRpY2Egc2UgaMOhIGFvIG1lbm9zIHVtYSBjb250YSBmaW5hbmNlaXJhIHNlbSBuZW5odW0gY2VudHJvIGRlIGN1c3RvIHZpbmN1bGFkby4gKi9cbiAgICBwcml2YXRlIGhhc0NvbnRhU2VtQ2VudHJvQ3VzdG8oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRhc0RhdGFTb3VyY2Uuc29tZShjb250YSA9PiAoY29udGEucmF0ZWlvc0NDdXN0byB8fCBbXSkubGVuZ3RoID09PSAwKTtcbiAgICB9XG5cbiAgICAvKiogUmVzdGFudGUgZGUgJSBlIGRlIHZhbG9yIGRvcyBjZW50cm9zIGRlIGN1c3RvIGRlIHVtYSBjb250YSBpZ3VhbCBhIHplcm8uICovXG4gICAgcHJpdmF0ZSBpc0NvbnRhQ0NDb21wbGV0YShjb250YTogUmF0ZWlvQ29udGEpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgY2NzID0gY29udGEucmF0ZWlvc0NDdXN0byB8fCBbXTtcbiAgICAgICAgaWYgKGNjcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIC8vIENlbnRybyBkZSBjdXN0byDDqSBzZW1wcmUgb2JyaWdhdMOzcmlvOiBjb250YSBzZW0gbmVuaHVtIENDIG51bmNhIMOpIGNvbXBsZXRhLlxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNvbWFQY3QgPSBjY3MucmVkdWNlKChhY2MsIGNjKSA9PiBhY2MgKyAoY2MucGVyY2VudHVhbCB8fCAwKSwgMCk7XG4gICAgICAgIGNvbnN0IHNvbWFWYWxvciA9IGNjcy5yZWR1Y2UoKGFjYywgY2MpID0+IGFjYyArIChjYy52YWxvciB8fCAwKSwgMCk7XG4gICAgICAgIGNvbnN0IHBjdFJlc3RhbnRlID0gKygxMDAgLSBzb21hUGN0KS50b0ZpeGVkKHRoaXMuY29uZmlnLnBlcmNlbnRhZ2VTY2FsZSA/PyA0KTtcbiAgICAgICAgY29uc3QgdmFsb3JSZXN0YW50ZSA9ICsoKGNvbnRhLnZhbG9yUmF0ZWFkb0NvbnRhIHx8IDApIC0gc29tYVZhbG9yKS50b0ZpeGVkKHRoaXMuY29uZmlnLmN1cnJlbmN5U2NhbGUgPz8gMik7XG4gICAgICAgIHJldHVybiBwY3RSZXN0YW50ZSA9PT0gMCAmJiB2YWxvclJlc3RhbnRlID09PSAwO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Q29udGFEaWFsb2dGaWVsZHMoKTogRm9ybUZpZWxkW10ge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5lMDkxUGxmTG9va3VwLm1vdW50T3B0aW9ucyh7XG4gICAgICAgICAgICAgICAgICAgIG11bHRpcGxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwOiAnY29udGFGaW5hbmNlaXJhJyxcbiAgICAgICAgICAgICAgICAgICAgcXVlcnlGaWVsZHM6IFsnYW5hU2luJ10sXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRGaWx0ZXI6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgZmllbGQ6ICdleGNsdWlkbycsIG9wZXJhdG9yOiBFbnVtTG9naWNhbE9wZXJhdG9yLkVxLCB2YWx1ZXM6IFsnZmFsc2UnXSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBmaWVsZDogJ3NpdEZpbicsIG9wZXJhdG9yOiBFbnVtTG9naWNhbE9wZXJhdG9yLkVxLCB2YWx1ZXM6IFsnVkEnXSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBmaWVsZDogJ2UwNzBlbXAnLCBvcGVyYXRvcjogRW51bUxvZ2ljYWxPcGVyYXRvci5FcSwgdmFsdWVzOiBbdGhpcy5lbXByZXNhSWRdIH1cbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHNpemU6IHsgc206IDEyLCBtZDogMTIsIGxnOiAxMiwgeGw6IDEyIH0sXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6ICgpID0+IHRydWVcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogJ3BlcmNlbnR1YWwnLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlcnB4LnJhdGVpb19lZGl0b3IucGVyY2VudHVhbCcpLFxuICAgICAgICAgICAgICAgIHNpemU6IHsgc206IDEyLCBtZDogNiwgbGc6IDYsIHhsOiA2IH0sXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLkRvdWJsZSxcbiAgICAgICAgICAgICAgICBwcmVjaXNpb246IDcsXG4gICAgICAgICAgICAgICAgc2NhbGU6IHRoaXMuY29uZmlnLnBlcmNlbnRhZ2VTY2FsZSA/PyA0LFxuICAgICAgICAgICAgICAgIHJpZ2h0QWRkb246IHsgbGFiZWw6ICclJyB9LFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiAoKSA9PiB0cnVlXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6ICd2YWxvcicsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VycHgucmF0ZWlvX2VkaXRvci52YWxvcicpLFxuICAgICAgICAgICAgICAgIHNpemU6IHsgc206IDEyLCBtZDogNiwgbGc6IDYsIHhsOiA2IH0sXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLk1vbmV5LFxuICAgICAgICAgICAgICAgIGN1cnJlbm5jeTogKCkgPT4gdGhpcy5jdXJyZW5jeUNvZGUsXG4gICAgICAgICAgICAgICAgcHJlY2lzaW9uOiAxOCxcbiAgICAgICAgICAgICAgICBzY2FsZTogdGhpcy5jb25maWcuY3VycmVuY3lTY2FsZSA/PyAyLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiAoKSA9PiB0cnVlXG4gICAgICAgICAgICB9KVxuICAgICAgICBdO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Q0NEaWFsb2dGaWVsZHMoKTogRm9ybUZpZWxkW10ge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5lMDQ0Q2N1TG9va3VwLm1vdW50T3B0aW9ucyh7XG4gICAgICAgICAgICAgICAgICAgIG11bHRpcGxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwOiAnY2VudHJvQ3VzdG8nLFxuICAgICAgICAgICAgICAgICAgICBxdWVyeUZpZWxkczogWydhbmFTaW4nLCAnYWNlUmF0J10sXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRGaWx0ZXI6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgZmllbGQ6ICdleGNsdWlkbycsIG9wZXJhdG9yOiBFbnVtTG9naWNhbE9wZXJhdG9yLkVxLCB2YWx1ZXM6IFsnZmFsc2UnXSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBmaWVsZDogJ3NpdENjdScsIG9wZXJhdG9yOiBFbnVtTG9naWNhbE9wZXJhdG9yLkVxLCB2YWx1ZXM6IFsnVkEnXSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBmaWVsZDogJ2UwNzBlbXAnLCBvcGVyYXRvcjogRW51bUxvZ2ljYWxPcGVyYXRvci5FcSwgdmFsdWVzOiBbdGhpcy5lbXByZXNhSWRdIH1cbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHNpemU6IHsgc206IDEyLCBtZDogMTIsIGxnOiAxMiwgeGw6IDEyIH0sXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6ICgpID0+IHRydWVcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogJ3BlcmNlbnR1YWwnLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlcnB4LnJhdGVpb19lZGl0b3IucGVyY2VudHVhbCcpLFxuICAgICAgICAgICAgICAgIHNpemU6IHsgc206IDEyLCBtZDogNiwgbGc6IDYsIHhsOiA2IH0sXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLkRvdWJsZSxcbiAgICAgICAgICAgICAgICBwcmVjaXNpb246IDcsXG4gICAgICAgICAgICAgICAgc2NhbGU6IHRoaXMuY29uZmlnLnBlcmNlbnRhZ2VTY2FsZSA/PyA0LFxuICAgICAgICAgICAgICAgIHJpZ2h0QWRkb246IHsgbGFiZWw6ICclJyB9LFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiAoKSA9PiB0cnVlXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6ICd2YWxvcicsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VycHgucmF0ZWlvX2VkaXRvci52YWxvcicpLFxuICAgICAgICAgICAgICAgIHNpemU6IHsgc206IDEyLCBtZDogNiwgbGc6IDYsIHhsOiA2IH0sXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLk1vbmV5LFxuICAgICAgICAgICAgICAgIGN1cnJlbm5jeTogKCkgPT4gdGhpcy5jdXJyZW5jeUNvZGUsXG4gICAgICAgICAgICAgICAgcHJlY2lzaW9uOiAxOCxcbiAgICAgICAgICAgICAgICBzY2FsZTogdGhpcy5jb25maWcuY3VycmVuY3lTY2FsZSA/PyAyLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiAoKSA9PiB0cnVlXG4gICAgICAgICAgICB9KVxuICAgICAgICBdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNpbmNyb25pemEgb3MgY2FtcG9zIHBlcmNlbnR1YWwgZSB2YWxvciBkZSB1bSBGb3JtR3JvdXAgZGUgbW9kYWwuXG4gICAgICogUXVhbmRvIG8gdXN1w6FyaW8gYWx0ZXJhIHBlcmNlbnR1YWwsIHJlY2FsY3VsYSB2YWxvciAocGVyY2VudHVhbC8xMDAgKiBiYXNlKS5cbiAgICAgKiBRdWFuZG8gbyB1c3XDoXJpbyBhbHRlcmEgdmFsb3IsIHJlY2FsY3VsYSBwZXJjZW50dWFsICh2YWxvci9iYXNlICogMTAwKS5cbiAgICAgKiBPIGFyZ3VtZW50byBnZXRCYXNlIHJldG9ybmEgYSBiYXNlIHVzYWRhIG5vIGPDoWxjdWxvICh2YWxvckJhc2UgZ2xvYmFsIG91IHZhbG9yUmF0ZWFkb0NvbnRhIGRhIGNvbnRhIHBhaSkuXG4gICAgICovXG4gICAgcHJpdmF0ZSBzZXR1cFBlcmNlbnR1YWxWYWxvclN5bmMoZm9ybTogRm9ybUdyb3VwLCBnZXRCYXNlOiAoKSA9PiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcGVyY2VudHVhbFNjYWxlID0gdGhpcy5jb25maWcucGVyY2VudGFnZVNjYWxlID8/IDQ7XG4gICAgICAgIGNvbnN0IGN1cnJlbmN5U2NhbGUgPSB0aGlzLmNvbmZpZy5jdXJyZW5jeVNjYWxlID8/IDI7XG5cbiAgICAgICAgZm9ybS5nZXQoJ3BlcmNlbnR1YWwnKS52YWx1ZUNoYW5nZXNcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAgICAgLnN1YnNjcmliZShwY3QgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJhc2UgPSBnZXRCYXNlKCk7XG4gICAgICAgICAgICAgICAgaWYgKHBjdCA9PSBudWxsIHx8IGJhc2UgPT0gbnVsbCkgeyByZXR1cm47IH1cbiAgICAgICAgICAgICAgICBjb25zdCBub3ZvVmFsb3IgPSArKChOdW1iZXIocGN0KSAvIDEwMCkgKiBiYXNlKS50b0ZpeGVkKGN1cnJlbmN5U2NhbGUpO1xuICAgICAgICAgICAgICAgIGlmIChOdW1iZXIoZm9ybS5nZXQoJ3ZhbG9yJykudmFsdWUpICE9PSBub3ZvVmFsb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybS5nZXQoJ3ZhbG9yJykuc2V0VmFsdWUobm92b1ZhbG9yLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgZm9ybS5nZXQoJ3ZhbG9yJykudmFsdWVDaGFuZ2VzXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUodmFsID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBiYXNlID0gZ2V0QmFzZSgpO1xuICAgICAgICAgICAgICAgIGlmICh2YWwgPT0gbnVsbCB8fCAhYmFzZSkgeyByZXR1cm47IH1cbiAgICAgICAgICAgICAgICBjb25zdCBub3ZvUGN0ID0gKygoTnVtYmVyKHZhbCkgLyBiYXNlKSAqIDEwMCkudG9GaXhlZChwZXJjZW50dWFsU2NhbGUpO1xuICAgICAgICAgICAgICAgIGlmIChOdW1iZXIoZm9ybS5nZXQoJ3BlcmNlbnR1YWwnKS52YWx1ZSkgIT09IG5vdm9QY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybS5nZXQoJ3BlcmNlbnR1YWwnKS5zZXRWYWx1ZShub3ZvUGN0LCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRHcmlkQ29sdW1ucygpOiBhbnlbXSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICB7IGZpZWxkOiAnY29udGFGaW5hbmNlaXJhJywgaGVhZGVyOiAnZXJweC5yYXRlaW9fZWRpdG9yLmNvbnRhX2ZpbmFuY2VpcmEnIH0sXG4gICAgICAgICAgICB7IGZpZWxkOiAncGVyY2VudHVhbCcsIGhlYWRlcjogJ2VycHgucmF0ZWlvX2VkaXRvci5wZXJjZW50dWFsJyB9LFxuICAgICAgICAgICAgeyBmaWVsZDogJ3ZhbG9yUmF0ZWFkb0NvbnRhJywgaGVhZGVyOiAnZXJweC5yYXRlaW9fZWRpdG9yLnZhbG9yJyB9XG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBlbWl0Q2hhbmdlKGlzRGlydHk6IGJvb2xlYW4gPSB0cnVlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2hhbmdlLmVtaXQoe1xuICAgICAgICAgICAgaXNEaXJ0eSxcbiAgICAgICAgICAgIGlzVmFsaWQ6IHRoaXMuaXNEaXN0cmlidWljYW9Db21wbGV0YSgpLFxuICAgICAgICAgICAgcmF0ZWlvczogdGhpcy5jb250YXNEYXRhU291cmNlXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==