@seniorsistemas/yms-integration 1.16.0 → 1.16.1

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.
@@ -153,13 +153,7 @@ var RecebimentoOrdemCompraFormComponent = /** @class */ (function () {
153
153
  }
154
154
  this.getEmpresaFilial();
155
155
  this.totalEixosComposicao = this.agenda && this.agenda.veiculo ? this.agenda.veiculo.eixos || 0 : 0;
156
- var statusAgenda = [
157
- "AGUARDANDO_CONFIRMACAO_SOLICITANTE",
158
- "AGENDADO",
159
- "AGUARDANDO_CONFIRMACAO",
160
- "EM_EXECUCAO",
161
- "REJEITADO_POR_VALIDACAO"
162
- ];
156
+ var statusAgenda = ["AGUARDANDO_CONFIRMACAO_SOLICITANTE", "AGENDADO", "AGUARDANDO_CONFIRMACAO", "REJEITADO_POR_VALIDACAO"];
163
157
  if (this.agenda && !statusAgenda.includes(this.agenda.status)) {
164
158
  this.formGroup.disable();
165
159
  this.disableButtonSave = true;
@@ -1222,4 +1216,4 @@ var RecebimentoOrdemCompraFormComponent = /** @class */ (function () {
1222
1216
  return RecebimentoOrdemCompraFormComponent;
1223
1217
  }());
1224
1218
  export { RecebimentoOrdemCompraFormComponent };
1225
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjZWJpbWVudG8tb3JkZW0tY29tcHJhLWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHNlbmlvcnNpc3RlbWFzL3ltcy1pbnRlZ3JhdGlvbi8iLCJzb3VyY2VzIjpbInNyYy9lcnAtc2VuaW9yL3JlY2ViaW1lbnRvLW9yZGVtLWNvbXByYS9mb3JtL3JlY2ViaW1lbnRvLW9yZGVtLWNvbXByYS1mb3JtLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFDeEYsT0FBTyxFQUFpQixTQUFTLEVBQUUsS0FBSyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUNuRixPQUFPLEVBQW1CLFNBQVMsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3RyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFVLE1BQU0sb0NBQW9DLENBQUM7QUFDbEYsT0FBTyxLQUFLLE9BQU8sTUFBTSxRQUFRLENBQUM7QUFDbEMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQVksTUFBTSxhQUFhLENBQUM7QUFDM0YsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckcsT0FBTyxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDL0YsT0FBTyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUNuRixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDM0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUNuRixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDM0QsT0FBTyxFQUFFLGFBQWEsRUFBeUIsTUFBTSwyQ0FBMkMsQ0FBQztBQUVqRyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx1REFBdUQsQ0FBQztBQUMzRixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scURBQXFELENBQUM7QUFDckYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNkRBQTZELENBQUM7QUFDcEcsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQzNELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDOUQsT0FBTyxFQUFpQixjQUFjLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUM1RixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx1RUFBdUUsQ0FBQztBQUUvRyxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSwrRUFBK0UsQ0FBQztBQUU5SCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFFdkUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkRBQTJELENBQUM7QUFDbEcsT0FBTyxFQUFFLG9CQUFvQixFQUE4QixNQUFNLG1DQUFtQyxDQUFDO0FBQ3JHLE9BQU8sRUFBRSw0Q0FBNEMsRUFBRSxNQUFNLHNEQUFzRCxDQUFDO0FBQ3BILE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNoRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUU5RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUNwRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUUxRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUU1RSxJQUFNLE1BQU0sR0FBRyxPQUFPLENBQUM7QUFTdkI7SUFxR0ksNkNBQ1ksV0FBd0IsRUFDeEIsU0FBMkIsRUFDM0IsYUFBNEIsRUFDNUIsYUFBNEIsRUFDNUIsY0FBOEIsRUFDOUIsZ0JBQWtDLEVBQ2xDLHFCQUE0QyxFQUM1QyxrQkFBc0MsRUFDdEMsNkJBQTRELEVBQzVELGNBQThCLEVBQzlCLEtBQXFCLEVBQ3JCLE1BQWMsRUFDZCx1QkFBOEMsRUFDOUMsWUFBMEIsRUFDMUIsUUFBc0QsRUFDdEQsb0JBQTBDLEVBQzFDLG1CQUF3QyxFQUN4QyxhQUE0QixFQUM1QixhQUE0QixFQUM1QixpQkFBb0MsRUFDcEMsb0JBQTBDLEVBQzFDLGtCQUFzQyxFQUN0QyxnQkFBa0M7UUF2QjlDLGlCQTBCQztRQXpCVyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUMzQixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQywwQkFBcUIsR0FBckIscUJBQXFCLENBQXVCO1FBQzVDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMsa0NBQTZCLEdBQTdCLDZCQUE2QixDQUErQjtRQUM1RCxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFDckIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLDRCQUF1QixHQUF2Qix1QkFBdUIsQ0FBdUI7UUFDOUMsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsYUFBUSxHQUFSLFFBQVEsQ0FBOEM7UUFDdEQseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFzQjtRQUMxQyx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBQ3hDLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFzQjtRQUMxQyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3RDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUF2SDlDLGlDQUE0QixHQUFHLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3ZELG1DQUE4QixHQUFHLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUMvRCw2QkFBd0IsR0FBRyxLQUFLLENBQUM7UUFPakMsOEJBQXlCLEdBQUcsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQy9ELGdDQUEyQixHQUFHLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDdkUsMEJBQXFCLEdBQUcsS0FBSyxDQUFDO1FBTTlCLGtDQUE2QixHQUFHLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztRQUM5RCxvQ0FBK0IsR0FBRyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDM0QsOEJBQXlCLEdBQUcsS0FBSyxDQUFDO1FBT2xDLG1DQUE4QixHQUFHLENBQUMsUUFBUSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQzVELHFDQUFnQyxHQUFHLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQ2xHLCtCQUEwQixHQUFHLEtBQUssQ0FBQztRQU1uQyx3Q0FBbUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUM3RCwwQ0FBcUMsR0FBRyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQy9FLG9DQUErQixHQUFHLEtBQUssQ0FBQztRQU14QywrQkFBMEIsR0FBRyxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUNyRCxpQ0FBNEIsR0FBRyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDN0QsMkJBQXNCLEdBQUcsS0FBSyxDQUFDO1FBTy9CLDZCQUF3QixHQUFHLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ25ELCtCQUEwQixHQUFHLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUMzRCx5QkFBb0IsR0FBRyxLQUFLLENBQUM7UUFPN0Isc0NBQWlDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFDaEYsd0NBQW1DLEdBQUcsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3hGLGtDQUE2QixHQUFHLEtBQUssQ0FBQztRQUl0QyxzQkFBaUIsR0FBWSxLQUFLLENBQUM7UUFJbkMsMEJBQXFCLEdBQVcsQ0FBQyxDQUFDO1FBQ2xDLHlCQUFvQixHQUFXLENBQUMsQ0FBQztRQUVqQyxrQkFBYSxHQUFHLEtBQUssQ0FBQztRQUN0QixxQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFFbEIsZ0JBQVcsR0FBYSxFQUFFLENBQUM7UUFDM0IsMEJBQXFCLEdBQWEsRUFBRSxDQUFDO1FBQ3JDLG9CQUFlLEdBQUcsRUFBRSxDQUFDO1FBRXBCLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBRTlCLDJCQUFzQixHQUFRLElBQUksQ0FBQztRQVFsQixrQkFBYSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFzUHJELCtEQUErRDtRQUN2RCx3QkFBbUIsR0FBRyxVQUFDLE1BQWMsRUFBRSxTQUFvQjtZQUMvRCxLQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUM1RCxDQUFDLENBQUE7UUFFTyx1QkFBa0IsR0FBRyxVQUFDLFVBQTBCLEVBQUUsU0FBb0I7WUFDMUUsS0FBSSxDQUFDLG9CQUFvQixDQUFDLFVBQVUsRUFBRSxrQkFBa0IsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUNyRSxLQUFJLENBQUMsb0JBQW9CLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUMvRCxDQUFDLENBQUE7UUFtOEJPLHlCQUFvQixHQUFHLFVBQUMsQ0FBQztZQUM3QixJQUFJLEtBQUksQ0FBQyxjQUFjLElBQUksS0FBSSxDQUFDLFNBQVMsRUFBRTtnQkFDdkMsS0FBSSxDQUFDLGNBQWMsR0FBRyxLQUFJLENBQUMsaUJBQWlCLENBQUMscUJBQXFCLENBQUMsS0FBSSxDQUFDLGNBQWMsRUFBRSxLQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ3hHLEtBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsS0FBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2FBQzFEO1lBQ0QsT0FBTztRQUNYLENBQUMsQ0FBQTtRQXhxQ0csSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDekMsQ0FBQztJQUVNLHNEQUFRLEdBQWY7UUFBQSxpQkE2REM7UUE1REcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsVUFBQyxFQUFVO2dCQUFSLGtCQUFNO1lBQ3JFLElBQUksTUFBTSxJQUFJLEtBQUssRUFBRTtnQkFDakIsT0FBTyxLQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7YUFDL0I7WUFDRCxLQUFJLENBQUMseUJBQXlCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0MsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsU0FBUzthQUNYLEdBQUcsQ0FBQyxRQUFRLENBQUM7YUFDYixZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7YUFDaEQsU0FBUyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBRXRDLElBQUksQ0FBQyxTQUFTO2FBQ2IsR0FBRyxDQUFDLGNBQWMsQ0FBQzthQUNuQixZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7YUFDaEQsU0FBUyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBRXhDLElBQUksQ0FBQyxTQUFTO2FBQ1gsR0FBRyxDQUFDLGdCQUFnQixDQUFDO2FBQ3JCLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQzthQUNoRCxTQUFTLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFHeEMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1FBQzdELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUN2RCxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7UUFDL0QsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1FBQy9ELElBQUksQ0FBQyw0QkFBNEIsR0FBRyxJQUFJLENBQUMsK0JBQStCLEVBQUUsQ0FBQztRQUMzRSxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDekQsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQ3JELElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztRQUM3RCxJQUFJLENBQUMsMEJBQTBCLEdBQUcsSUFBSSxDQUFDLDZCQUE2QixFQUFFLENBQUM7UUFDdkUsSUFBSSxDQUFDLDhCQUE4QixHQUFHLElBQUksQ0FBQyxpQ0FBaUMsRUFBRSxDQUFDO1FBQy9FLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUMzRCxJQUFJLENBQUMsMkJBQTJCLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7UUFFbkUsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxFQUFFO1lBQzNDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUMzRDtRQUVELElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBRXhCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFcEcsSUFBTSxZQUFZLEdBQUc7WUFDakIsb0NBQW9DO1lBQ3BDLFVBQVU7WUFDVix3QkFBd0I7WUFDeEIsYUFBYTtZQUNiLHlCQUF5QjtTQUM1QixDQUFDO1FBQ0YsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQzdELElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztTQUMvQjtRQUNELElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBRS9CLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLFVBQUEsT0FBTyxJQUFJLE9BQUEsS0FBSSxDQUFDLGNBQWMsR0FBRyxPQUFPLEVBQTdCLENBQTZCLENBQUMsQ0FBQztRQUNuRixJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxVQUFBLE9BQU8sSUFBSSxPQUFBLEtBQUksQ0FBQyxrQkFBa0IsR0FBRyxPQUFPLEVBQWpDLENBQWlDLENBQUMsQ0FBQztRQUMxRixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRU8sb0VBQXNCLEdBQTlCO1FBQUEsaUJBTUc7UUFMQyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUM7WUFDbEMsSUFBSSxLQUFJLENBQUMsYUFBYSxFQUFFO2dCQUNwQixLQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLEtBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7YUFDbkQ7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFSSw2REFBZSxHQUF0QjtRQUNJLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVNLHlEQUFXLEdBQWxCO1FBQ0ksSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVNLHFFQUF1QixHQUE5QjtRQUNJLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRTtZQUN6QyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztZQUN6QixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN2QyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN4QyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUMxQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEtBQUssRUFBRTtnQkFDOUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQzthQUNsRDtTQUNKO0lBQ0wsQ0FBQztJQUVPLDJEQUFhLEdBQXJCO1FBQUEsaUJBcUJDO1FBcEJHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDdEUsSUFBTSxxQkFBcUIsR0FBRyxVQUFDLEtBQVUsSUFBSyxPQUFBLG9CQUFrQixLQUFLLENBQUMsRUFBRSw4QkFBMkIsRUFBckQsQ0FBcUQsQ0FBQztRQUNwRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxxQkFBcUIsRUFDeEcsQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLEVBQUUsVUFBQyxHQUFHLElBQUssT0FBQSxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUF0QixDQUFzQixFQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUM1RSxDQUFDO1FBRUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFlLENBQUMsWUFBWTthQUN6RCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQzthQUNuQyxTQUFTLENBQUMsVUFBQSxZQUFZO1lBQ25CLElBQUksQ0FBQyxDQUFDLFlBQVksSUFBSSxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDM0MsS0FBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ3hDLEtBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO2FBQzdDO2lCQUFNO2dCQUNILEtBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUN2QyxLQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQzthQUM1QztRQUNMLENBQUMsQ0FBQyxDQUFBO1FBRUYsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7SUFDbEMsQ0FBQztJQUVPLDhEQUFnQixHQUF4QjtRQUFBLGlCQW9CQztRQW5CRyxJQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUNsRCxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUM7WUFBRSxPQUFPO1FBRXJDLElBQU0sV0FBVyxHQUFHLHdCQUFzQixNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFHLENBQUM7UUFDNUQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRSxXQUFXLGFBQUEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQzthQUN0RCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQzthQUNuQyxTQUFTLENBQUMsVUFBQyxFQUFZO2dCQUFWLHNCQUFRO1lBQ2xCLElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7Z0JBQ3ZCLElBQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDM0IsSUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztnQkFDcEMsTUFBTSxDQUFDLEtBQUssR0FBTSxNQUFNLENBQUMsTUFBTSxXQUFNLE1BQU0sQ0FBQyxJQUFNLENBQUM7Z0JBQ25ELE9BQU8sQ0FBQyxLQUFLLEdBQU0sT0FBTyxDQUFDLE1BQU0sV0FBTSxPQUFPLENBQUMsSUFBTSxDQUFDO2dCQUN0RCxLQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ2hELEtBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDOUMsS0FBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ3RDLEtBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUN2QyxLQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQzthQUM5QztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVPLGdFQUFrQixHQUExQixVQUEyQixTQUFvQixFQUFFLGtCQUEwQixFQUFFLG9CQUE0QixFQUFFLE9BQVksRUFBRSxjQUFtQixFQUN4SSxTQUFjLEVBQUUsWUFBK0IsRUFBRSxTQUFxQixFQUFFLGtCQUE0QixFQUFFLHlCQUFtQztRQUQ3SSxpQkF5Q0M7UUF4Q29ELDBCQUFBLEVBQUEsYUFBcUI7UUFDdEUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQzthQUM1QixZQUFZO2FBQ1osSUFBSSxDQUNELFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFDakIsTUFBTSxDQUFDLFVBQUEsS0FBSztZQUNSLElBQUksa0JBQWtCLEVBQUU7Z0JBQ3BCLFNBQVMsQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUM7YUFDN0c7WUFDRCxJQUFJLHlCQUF5QixFQUFFO2dCQUMzQixTQUFTLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ3REO1lBQ0QsSUFBSSxDQUFDLEtBQUssRUFBRTtnQkFDUixTQUFTLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNuRCxTQUFTLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQzlDLE9BQU8sS0FBSyxDQUFDO2FBQ2hCO1lBQ0QsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQyxDQUFDLEVBQ0YsUUFBUSxDQUFDLFVBQUMsS0FBVTtZQUNoQixJQUFNLFdBQVcsR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDMUMsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsV0FBVyxhQUFBLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUNuRSxDQUFDLENBQUMsQ0FDTDthQUNBLFNBQVMsQ0FBQyxVQUFDLEVBQVk7Z0JBQVYsc0JBQVE7WUFDbEIsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQ3RELE9BQU8sU0FBUyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO2FBQ3ZEO1lBQ0QsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtnQkFDdkIsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDaEcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUMzRTtZQUVELElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQ3JCLFNBQVMsQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQzthQUNoRDtpQkFBTTtnQkFDSCxTQUFTLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7YUFDakQ7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFTSxtRUFBcUIsR0FBNUI7UUFBQSxpQkFxQkM7UUFwQkcsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsaUNBQWlDLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFO1lBQzNILE9BQU87U0FDVjtRQUVELElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN2QixJQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO1FBQ25DLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRTtZQUNULElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBRTVCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxpQ0FBaUMsQ0FBQztnQkFDeEQsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxJQUFJO2dCQUMvRixjQUFjLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUU7YUFDckMsQ0FBQyxDQUFDLElBQUksQ0FDSCxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUM3QixRQUFRLENBQUMsY0FBTSxPQUFBLEtBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxFQUFwQixDQUFvQixDQUFDLENBQ3ZDLENBQUMsU0FBUyxDQUFDLFVBQUMsUUFBUTtnQkFDakIsS0FBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUMvQixDQUFDLENBQUMsQ0FBQztTQUNOO0lBQ0wsQ0FBQztJQUVPLDBEQUFZLEdBQXBCLFVBQXFCLFNBQW9CLEVBQUUsSUFBWSxFQUFFLFNBQWM7UUFDbkUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7YUFDZCxZQUFZO2FBQ1osSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7YUFDbkMsU0FBUyxDQUFDLFVBQUEsS0FBSyxJQUFJLE9BQUEsU0FBUyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsRUFBM0IsQ0FBMkIsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFZTyxrRUFBb0IsR0FBNUIsVUFBNkIsS0FBVSxFQUFFLFdBQW1CLEVBQUUsU0FBYztRQUN4RSxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1IsU0FBUyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDL0MsU0FBUyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNyQyxPQUFPO1NBQ1Y7UUFFRCxTQUFTLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ3hDLENBQUM7SUFFTSx1RUFBeUIsR0FBaEMsVUFBaUMsUUFBZ0I7UUFBakQsaUJBcUNDO1FBcENHLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxJQUFJLENBQUM7WUFDcEMsV0FBVyxFQUFFLG1CQUFpQixRQUFRLE1BQUc7WUFDekMsSUFBSSxFQUFFLENBQUM7WUFDUCxJQUFJLEVBQUUsQ0FBQztTQUNWLENBQUM7YUFDRCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxRQUFRLENBQUMsY0FBTSxPQUFBLEtBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxFQUFwQixDQUFvQixDQUFDLENBQUM7YUFDekUsU0FBUyxDQUFDLFVBQUMsRUFBWTtnQkFBVixzQkFBUTtZQUNsQixJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRTtnQkFDbEIsS0FBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7Z0JBQzFCLE9BQU8sS0FBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO2FBQy9CO1lBRUQsS0FBSSxDQUFDLHFCQUFxQixHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO1lBQ3BELEtBQUksQ0FBQyxvQkFBb0IsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTztnQkFDeEUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUVoRCxJQUFNLHNCQUFzQixHQUE4QixzQkFBc0IsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEcsS0FBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN4QixLQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1lBRWxELHNCQUFzQixDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsVUFBQSxVQUFVO2dCQUNsRCxJQUFNLElBQUksR0FBRyxLQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ2hELEtBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFFdEMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBQSxXQUFXO29CQUNqQyxJQUFNLGVBQWUsR0FBRyxLQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLENBQUM7b0JBQzdELEtBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO29CQUNqRCxXQUFXLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFBLElBQUk7d0JBQzFCLElBQU0sUUFBUSxHQUFHLEtBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQ3hDLEtBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUNsRCxDQUFDLENBQUMsQ0FBQztnQkFDUCxDQUFDLENBQUMsQ0FBQztZQUNQLENBQUMsQ0FBQyxDQUFDO1lBQ0gsS0FBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVNLG1FQUFxQixHQUE1QixVQUE2QixLQUFhO1FBQTFDLGlCQWdCQztRQWZHLElBQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsRUFBRTthQUMzQyxNQUFNLENBQUMsVUFBQyxFQUFRO2dCQUFOLGNBQUk7WUFBTyxPQUFBLGFBQWEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDO1FBQTFCLENBQTBCLENBQUM7YUFDaEQsTUFBTSxDQUFDLFVBQUMsQ0FBQyxFQUFFLEVBQWM7Z0JBQVosY0FBSSxFQUFFLGNBQUk7O1lBQ3BCLElBQUksSUFBSSxLQUFLLFNBQVMsQ0FBQyxPQUFPLEVBQUU7Z0JBQzVCLDRCQUFZLENBQUMsZUFBRyxJQUFJLElBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLE9BQUc7YUFDcEQ7WUFDRCw0QkFBWSxDQUFDLGVBQUcsSUFBSSxJQUFHLEtBQUssT0FBRztRQUNuQyxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUEyQixDQUFDLENBQUM7UUFFdEcsSUFBSSxDQUFDLGFBQWE7YUFDYixXQUFXLENBQUMsV0FBVyxDQUFDO2FBQ3hCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2FBQ25DLFNBQVMsQ0FBQyxVQUFDLElBQVM7WUFDakIsT0FBQSxLQUFJLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBQyxNQUFXLElBQUssT0FBQSxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUF0QixDQUFzQixDQUFDO1FBQXhGLENBQXdGLENBQzNGLENBQUM7SUFDVixDQUFDO0lBRU0sbUVBQXFCLEdBQTVCLFVBQTZCLEtBQVU7UUFBdkMsaUJBc0JDO1FBckJXLElBQUEsbUJBQUssRUFBRSxpQkFBSSxFQUFFLG1DQUFhLEVBQUUsNkJBQVUsQ0FBVztRQUN6RCxJQUFNLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQzFCLElBQU0sSUFBSSxHQUFlLGFBQWEsQ0FBQztRQUN2QyxJQUFNLGFBQWEsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3ZILElBQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsRUFBRTthQUMzQyxNQUFNLENBQUMsVUFBQyxFQUFRO2dCQUFOLGNBQUk7WUFBTyxPQUFBLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxTQUFTLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUU7UUFBdkQsQ0FBdUQsQ0FBQzthQUM3RSxNQUFNLENBQUMsVUFBQyxDQUFDLEVBQUUsRUFBYztnQkFBWixjQUFJLEVBQUUsY0FBSTs7WUFDcEIsSUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQy9CLElBQUksSUFBSSxLQUFLLFNBQVMsQ0FBQyxPQUFPLEVBQUU7Z0JBQzVCLDRCQUFZLENBQUMsZUFBRyxJQUFJLElBQUcsQ0FBQSxLQUFHLEtBQU8sQ0FBQSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLE9BQUc7YUFDekQ7WUFDRCw0QkFBWSxDQUFDLGVBQUcsSUFBSSxJQUFHLEtBQUssT0FBRztRQUNuQyxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQyxzQkFBTyxDQUFDLGFBQWEsQ0FBQyxFQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUEyQixDQUFDLENBQUM7UUFFOUssSUFBSSxDQUFDLGFBQWE7YUFDYixXQUFXLENBQUMsV0FBVyxDQUFDO2FBQ3hCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2FBQ25DLFNBQVMsQ0FBQyxVQUFDLElBQVM7WUFDakIsS0FBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM3RCxLQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDO1FBQzNELENBQUMsQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVELCtCQUErQjtJQUN4Qix1RUFBeUIsR0FBaEMsVUFBaUMsS0FBYTtRQUE5QyxpQkFNQztRQUxHLGVBQWUsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsSUFBSSxDQUFDLDZCQUE2QixFQUMzRSxJQUFJLENBQUMsK0JBQStCLEVBQUUsSUFBSSxDQUFDLHlCQUF5QixFQUFFLElBQUksQ0FBQyxhQUFhLEVBQ3hGLEtBQUssRUFBRSxzQkFBc0IsQ0FBQzthQUM3QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQzthQUNuQyxTQUFTLENBQUMsVUFBQyxJQUFTLElBQUssT0FBQSxLQUFJLENBQUMsMkJBQTJCLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBaEQsQ0FBZ0QsQ0FBQyxDQUFDO0lBQ3BGLENBQUM7SUFFTSx1RUFBeUIsR0FBaEMsVUFBaUMsS0FBVTtRQUEzQyxpQkFTQztRQVJHLGVBQWUsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsSUFBSSxDQUFDLDZCQUE2QixFQUMzRSxJQUFJLENBQUMsK0JBQStCLEVBQUUsSUFBSSxDQUFDLHlCQUF5QixFQUFFLElBQUksQ0FBQyxhQUFhLEVBQ3hGLEtBQUssRUFBRSxzQkFBc0IsQ0FBQzthQUM3QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQzthQUNuQyxTQUFTLENBQUMsVUFBQyxJQUFTO1lBQ2pCLEtBQUksQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQzlDLEtBQUksQ0FBQyw0QkFBNEIsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO1FBQzNELENBQUMsQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVELDBEQUEwRDtJQUNuRCw2RUFBK0IsR0FBdEMsVUFBdUMsY0FBeUIsRUFBRSxLQUFhO1FBQS9FLGlCQVFDO1FBUEcsZUFBZSxDQUFDLElBQUksQ0FBQyw0QkFBNEIsRUFBRSxJQUFJLENBQUMsbUNBQW1DLEVBQ3ZGLElBQUksQ0FBQyxxQ0FBcUMsRUFBRSxJQUFJLENBQUMsK0JBQStCLEVBQUUsSUFBSSxDQUFDLHVCQUF1QixFQUM5RyxLQUFLLEVBQUUsb0JBQWtCLGNBQWMsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsT0FBSSxDQUFDO2FBQ3RFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2FBQ25DLFNBQVMsQ0FBQyxVQUFDLElBQVM7WUFDakIsS0FBSSxDQUFDLGlDQUFpQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDM0QsQ0FBQyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRU0sNkVBQStCLEdBQXRDLFVBQXVDLGNBQXlCLEVBQUUsS0FBVTtRQUE1RSxpQkFTQztRQVJHLGVBQWUsQ0FBQyxJQUFJLENBQUMsNEJBQTRCLEVBQUUsSUFBSSxDQUFDLG1DQUFtQyxFQUN2RixJQUFJLENBQUMscUNBQXFDLEVBQUUsSUFBSSxDQUFDLCtCQUErQixFQUFFLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxLQUFLLEVBQ3JILG9CQUFrQixjQUFjLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLE9BQUksQ0FBQzthQUMvRCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQzthQUNuQyxTQUFTLENBQUMsVUFBQyxJQUFTO1lBQ2pCLEtBQUksQ0FBQyw4QkFBOEIsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQ3BELEtBQUksQ0FBQyxrQ0FBa0MsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO1FBQ2pFLENBQUMsQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVELG1DQUFtQztJQUM1QixzRUFBd0IsR0FBL0IsVUFBZ0MsS0FBYTtRQUE3QyxpQkFRQztRQVBHLGVBQWUsQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsSUFBSSxDQUFDLDRCQUE0QixFQUFFLElBQUksQ0FBQyw4QkFBOEIsRUFDOUcsSUFBSSxDQUFDLHdCQUF3QixFQUFFLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLEVBQzNELHFCQUFtQixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxPQUFJLENBQUM7YUFDN0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7YUFDbkMsU0FBUyxDQUFDLFVBQUMsSUFBUztZQUNqQixLQUFJLENBQUMsMEJBQTBCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUNwRCxDQUFDLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFTSxzRUFBd0IsR0FBL0IsVUFBZ0MsS0FBVTtRQUExQyxpQkFTQztRQVJHLGVBQWUsQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsSUFBSSxDQUFDLDRCQUE0QixFQUN6RSxJQUFJLENBQUMsOEJBQThCLEVBQUUsSUFBSSxDQUFDLHdCQUF3QixFQUFFLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLEVBQ2hHLHFCQUFtQixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxPQUFJLENBQUM7YUFDN0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7YUFDbkMsU0FBUyxDQUFDLFVBQUMsSUFBUztZQUNqQixLQUFJLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUM3QyxLQUFJLENBQUMsMkJBQTJCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztRQUMxRCxDQUFDLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFTSx3RUFBMEIsR0FBakMsVUFBa0MsY0FBeUIsRUFBRSxLQUFhO1FBQTFFLGlCQVFDO1FBUEcsZUFBZSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxJQUFJLENBQUMsOEJBQThCLEVBQUUsSUFBSSxDQUFDLGdDQUFnQyxFQUNwSCxJQUFJLENBQUMsMEJBQTBCLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixFQUFFLEtBQUssRUFDL0QsbUJBQWlCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLDRCQUF1QixjQUFjLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLE1BQUcsQ0FBQzthQUN6SCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQzthQUNuQyxTQUFTLENBQUMsVUFBQyxJQUFTO1lBQ2pCLEtBQUksQ0FBQyw0QkFBNEIsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ3RELENBQUMsQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVNLHdFQUEwQixHQUFqQyxVQUFrQyxjQUF5QixFQUFFLEtBQVU7UUFBdkUsaUJBU0M7UUFSRyxlQUFlLENBQUMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLElBQUksQ0FBQyw4QkFBOEIsRUFDN0UsSUFBSSxDQUFDLGdDQUFnQyxFQUFFLElBQUksQ0FBQywwQkFBMEIsRUFBRSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxFQUN0RyxtQkFBaUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsNEJBQXVCLGNBQWMsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsTUFBRyxDQUFDO2FBQ3pILElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2FBQ25DLFNBQVMsQ0FBQyxVQUFDLElBQVM7WUFDakIsS0FBSSxDQUFDLHlCQUF5QixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDL0MsS0FBSSxDQUFDLDZCQUE2QixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7UUFDNUQsQ0FBQyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRU0sNERBQWMsR0FBckIsVUFBc0IsY0FBeUI7UUFBL0MsaUJBZUM7UUFkRyxJQUFJLENBQUMsYUFBYTthQUNiLElBQUksQ0FBQyx3QkFBd0IsdUJBQ3ZCLFlBQVksSUFDZixNQUFNLEVBQUUsMkJBQTJCLEVBQ25DLElBQUksRUFBRTtnQkFDRixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07Z0JBQ25CLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLO2dCQUMxQyxVQUFVLEVBQUUsY0FBYyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxLQUFLO2dCQUNsRCxNQUFNLEVBQUUsY0FBYyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLO2FBQzdDLElBQ0g7YUFDRCxPQUFPO2FBQ1AsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsTUFBTSxDQUFDLFVBQUEsS0FBSyxJQUFJLE9BQUEsQ0FBQyxDQUFDLEtBQUssRUFBUCxDQUFPLENBQUMsQ0FBQzthQUM3RCxTQUFTLENBQUMsVUFBQyxXQUFnQixJQUFLLE9BQUEsS0FBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsRUFBRSxjQUFjLENBQUMsRUFBcEQsQ0FBb0QsQ0FBQyxDQUFDO0lBQy9GLENBQUM7SUFFTSxvRUFBc0IsR0FBN0IsVUFBOEIsS0FBYTtRQUEzQyxpQkFpQkM7UUFoQkcsSUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQ2xELElBQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDO1FBRXBELElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDO1lBQzdCLFFBQVEsRUFBRSxLQUFLO1lBQ2YsU0FBUyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJO1lBQzlDLFFBQVEsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJO1lBQ3JDLGlCQUFpQixFQUFFLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUk7WUFDaEUsUUFBUSxFQUFFLE9BQU87WUFDakIsTUFBTSxFQUFFO2dCQUNKLEtBQUssRUFBRSxHQUFHO2dCQUNWLE1BQU0sRUFBRSxDQUFDO2FBQ1o7U0FDSixDQUFDO2FBQ0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7YUFDbkMsU0FBUyxDQUFDLFVBQUMsR0FBUSxJQUFLLE9BQUEsS0FBSSxDQUFDLHdCQUF3QixHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBakUsQ0FBaUUsQ0FBQyxDQUFDO0lBQ2hHLENBQUM7SUFFTSxvRUFBc0IsR0FBN0IsVUFBOEIsS0FBVTtRQUF4QyxpQkE4QkM7UUE3QlcsSUFBQSxtQkFBSyxFQUFFLGlCQUFJLEVBQUUsbUNBQWEsRUFBRSw2QkFBVSxDQUFXO1FBQ3pELElBQU0sSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDMUIsSUFBTSxJQUFJLEdBQWUsYUFBYSxDQUFDO1FBQ3ZDLElBQU0sYUFBYSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDdkgsSUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixFQUFFO2FBQzVDLE1BQU0sQ0FBQyxVQUFDLEVBQVE7Z0JBQU4sY0FBSTtZQUFPLE9BQUEsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLFNBQVMsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRTtRQUF2RCxDQUF1RCxDQUFDO2FBQzdFLE1BQU0sQ0FBQyxVQUFDLENBQUMsRUFBRSxFQUFjO2dCQUFaLGNBQUksRUFBRSxjQUFJOztZQUNwQixJQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDL0IsSUFBSSxJQUFJLEtBQUssU0FBUyxDQUFDLE9BQU8sRUFBRTtnQkFDNUIsNEJBQVksQ0FBQyxlQUFHLElBQUksSUFBRyxDQUFBLEtBQUcsS0FBTyxDQUFBLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsT0FBRzthQUN6RDtZQUNELDRCQUFZLENBQUMsZUFBRyxJQUFJLElBQUcsS0FBSyxPQUFHO1FBQ25DLENBQUMsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQyxzQkFBTyxDQUFDLGFBQWEsQ0FBQyxFQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFtQixDQUFDLENBQUM7UUFFdEksSUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQ2xELElBQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDO1FBRXBELElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxzQkFDekIsV0FBVyxJQUNkLFNBQVMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUM5QyxRQUFRLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUNyQyxRQUFRLEVBQUUsT0FBTyxFQUNqQixpQkFBaUIsRUFBRSxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQ2xFO2FBQ0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7YUFDbkMsU0FBUyxDQUFDLFVBQUMsR0FBUTtZQUNoQixLQUFJLENBQUMseUJBQXlCLEdBQUcsR0FBRyxDQUFDLGlCQUFpQixDQUFDO1lBQ3ZELEtBQUksQ0FBQyxxQkFBcUIsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbkUsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU0sa0VBQW9CLEdBQTNCLFVBQTRCLEtBQWE7UUFBekMsaUJBT0M7UUFORyxlQUFlLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyx3QkFBd0IsRUFDakUsSUFBSSxDQUFDLDBCQUEwQixFQUFFLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLEtBQUssQ0FBQzthQUNwRixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQzthQUNuQyxTQUFTLENBQUMsVUFBQyxJQUFTO1lBQ2pCLEtBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ2hELENBQUMsQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVNLGtFQUFvQixHQUEzQixVQUE0QixLQUFVO1FBQXRDLGlCQVFDO1FBUEcsZUFBZSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsd0JBQXdCLEVBQ2pFLElBQUksQ0FBQywwQkFBMEIsRUFBRSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUM7YUFDcEYsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7YUFDbkMsU0FBUyxDQUFDLFVBQUMsSUFBUztZQUNqQixLQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUN6QyxLQUFJLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztRQUN0RCxDQUFDLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFTSwyRUFBNkIsR0FBcEMsVUFBcUMsS0FBYTtRQUFsRCxpQkFPQztRQU5HLGVBQWUsQ0FBQyxJQUFJLENBQUMsMEJBQTBCLEVBQUUsSUFBSSxDQUFDLGlDQUFpQyxFQUNuRixJQUFJLENBQUMsbUNBQW1DLEVBQUUsSUFBSSxDQUFDLDZCQUE2QixFQUFFLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxLQUFLLENBQUM7YUFDL0csSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7YUFDbkMsU0FBUyxDQUFDLFVBQUMsSUFBUztZQUNqQixLQUFJLENBQUMsK0JBQStCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUN6RCxDQUFDLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFTSwyRUFBNkIsR0FBcEMsVUFBcUMsS0FBVTtRQUEvQyxpQkFRQztRQVBHLGVBQWUsQ0FBQyxJQUFJLENBQUMsMEJBQTBCLEVBQUUsSUFBSSxDQUFDLGlDQUFpQyxFQUNuRixJQUFJLENBQUMsbUNBQW1DLEVBQUUsSUFBSSxDQUFDLDZCQUE2QixFQUFFLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxLQUFLLENBQUM7YUFDL0csSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7YUFDbkMsU0FBUyxDQUFDLFVBQUMsSUFBUztZQUNqQixLQUFJLENBQUMsNEJBQTRCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUNsRCxLQUFJLENBQUMsZ0NBQWdDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztRQUMvRCxDQUFDLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFTSwrREFBaUIsR0FBeEIsVUFBeUIsS0FBYTtRQUF0QyxpQkFjQztRQWJHLElBQUksS0FBSyxFQUFFO1lBQ1AsSUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzVFLElBQU0sV0FBVyxHQUFHLHdCQUFzQixJQUFJLE1BQUcsQ0FBQztZQUNsRCxJQUFJLENBQUMscUJBQXFCO2lCQUNyQixJQUFJLENBQUMsRUFBRSxXQUFXLGFBQUEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQztpQkFDeEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7aUJBQ25DLFNBQVMsQ0FBQyxVQUFDLEVBQVk7b0JBQVYsc0JBQVE7Z0JBQ2xCLElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7b0JBQ3ZCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsS0FBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRSxhQUFhLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztvQkFDaEgsS0FBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQzlEO1lBQ0wsQ0FBQyxDQUFDLENBQUM7U0FDVjtJQUNMLENBQUM7SUFFTSxvREFBTSxHQUFiLFVBQWMsS0FBZTtRQUE3QixpQkFrQ0M7UUFqQ0csSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVuRCxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFO1lBQ3hCLE9BQU8sSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUNyRDtRQUVELElBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFlLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtZQUMvRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO1lBQzdCLE9BQU87U0FDVjtRQUVELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBRXBCLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFLLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQzNDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNsQztRQUVELElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLDRDQUE0QyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQy9ILElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzFELE9BQU8sSUFBSSxDQUFDLGFBQWE7YUFDeEIsaUJBQWlCLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQzthQUN0QyxJQUFJLENBQ0QsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDN0IsUUFBUSxDQUFDLGNBQU0sT0FBQSxLQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssRUFBcEIsQ0FBb0IsQ0FBQyxDQUN2QzthQUNBLFNBQVMsQ0FBQyxVQUFDLFFBQWE7WUFDckIsSUFBSSxRQUFRLENBQUMsaUJBQWlCLEVBQUU7Z0JBQzVCLEtBQUksQ0FBQyx1Q0FBdUMsRUFBRSxDQUFDO2FBQ2xEO2lCQUNJO2dCQUNELEtBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDM0I7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyxxRkFBdUMsR0FBL0M7UUFBQSxpQkF1QkM7UUF0QkcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQztZQUM3QixNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsb0NBQW9DLENBQUM7WUFDcEUsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLHNDQUFzQyxDQUFDO1lBQ3ZFLE1BQU0sRUFBRTtnQkFDSixLQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLEtBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ3BELEtBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLFlBQVksQ0FBQyx1QkFBdUIsQ0FBQztnQkFDMUQsS0FBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsRUFBQyxFQUFFLEVBQUUsS0FBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUMsQ0FBQztnQkFDOUQsS0FBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsRUFBQyxFQUFFLEVBQUUsS0FBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQUMsQ0FBQztnQkFDMUQsS0FBSSxDQUFDLGFBQWE7cUJBQ2IsZUFBZSxDQUFDLEtBQUksQ0FBQyxNQUFNLENBQUM7cUJBQzVCLElBQUksQ0FDRCxTQUFTLENBQUMsS0FBSSxDQUFDLGFBQWEsQ0FBQyxFQUM3QixTQUFTLENBQUMsVUFBQyxDQUFDLElBQUssT0FBQSxLQUFJLENBQUMsaUJBQWlCLEVBQUUsRUFBeEIsQ0FBd0IsQ0FBQyxFQUMxQyxRQUFRLENBQUMsY0FBTSxPQUFBLEtBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxFQUFwQixDQUFvQixDQUFDLENBQ3ZDO3FCQUNBLFNBQVMsQ0FBQyxVQUFDLENBQUM7b0JBQ1QsS0FBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO29CQUN0QixLQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLEVBQUUsRUFBRSxVQUFVLEVBQUUsS0FBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7Z0JBQzNFLENBQUMsQ0FBQyxDQUFDO1lBQ1gsQ0FBQztZQUNELE1BQU0sRUFBRSxjQUFNLE9BQUEsS0FBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLEVBQXBCLENBQW9CO1NBQ3JDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyx5REFBVyxHQUFuQixVQUFvQixLQUFjO1FBQWxDLGlCQWNDO1FBYkcsSUFBSSxDQUFDLGlCQUFpQixFQUFFO2FBQ25CLElBQUksQ0FDRCxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUM3QixRQUFRLENBQUMsY0FBTSxPQUFBLEtBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxFQUFwQixDQUFvQixDQUFDLENBQ3ZDO2FBQ0EsU0FBUyxDQUFDLFVBQUMsS0FBVTtZQUNsQixLQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUMsQ0FBQztZQUNwRCxLQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdEIsS0FBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxLQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3BELElBQUksS0FBSyxJQUFJLEtBQUksQ0FBQyxpQkFBaUIsRUFBRTtnQkFDakMsS0FBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxDQUFDO2FBQ2xDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRU8sNERBQWMsR0FBdEI7UUFDSSxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQztZQUNwQixRQUFRLEVBQUUsU0FBUztZQUNuQixPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMscUJBQXFCLENBQUM7WUFDdEQsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDO1NBQzFELENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTSxtREFBSyxHQUFaO1FBQ0ksT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRU0sMkRBQWEsR0FBcEIsVUFBcUIsSUFBVTtRQUMzQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQzlCLElBQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoRCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDNUMsT0FBTyxVQUFVLENBQUM7SUFDdEIsQ0FBQztJQUVNLDhEQUFnQixHQUF2QixVQUF3QixPQUFrQjtRQUExQyxpQkFTQztRQVJHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUM7WUFDN0IsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLGtDQUFrQyxDQUFDO1lBQ2xFLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxtQ0FBbUMsQ0FBQztZQUNwRSxNQUFNLEVBQUU7Z0JBQ0osSUFBTSxLQUFLLEdBQUcsS0FBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDbkUsS0FBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQy9DLENBQUM7U0FDSixDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU0sK0RBQWlCLEdBQXhCLFVBQXlCLElBQWM7UUFBZCxxQkFBQSxFQUFBLFNBQWM7UUFDbkMsSUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7WUFDckMsVUFBVSxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDO1lBQ2xELGdCQUFnQixFQUFFLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1lBQ3pDLE1BQU0sRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7U0FDckMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBRXBFLElBQU0sd0JBQXdCLEdBQUcsVUFBQyxLQUFVLElBQUssT0FBQSxtQkFBaUIsS0FBSyxDQUFDLEVBQUUsTUFBRyxFQUE1QixDQUE0QixDQUFDO1FBQzlFLElBQUksQ0FBQyxrQkFBa0IsQ0FDbkIsU0FBUyxFQUFFLFlBQVksRUFBRSxrQkFBa0IsRUFBRSxJQUFJLENBQUMsdUJBQXVCLEVBQ3pFLHdCQUF3QixFQUFFLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxFQUFFLFVBQUMsR0FBRyxJQUFLLE9BQUEsY0FBYyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBM0IsQ0FBMkIsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FDMUcsQ0FBQztRQUVGLE9BQU8sU0FBUyxDQUFDO0lBQ3JCLENBQUM7SUFFTSxpRUFBbUIsR0FBMUI7UUFDSSxPQUFRLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBZSxDQUFDO0lBQzdELENBQUM7SUFFTSxzREFBUSxHQUFmLFVBQWdCLFNBQW9CO1FBQ2hDLE9BQVEsU0FBUyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQWUsQ0FBQztJQUNqRCxDQUFDO0lBRU0scURBQU8sR0FBZCxVQUFlLFNBQW9CO1FBQW5DLGlCQWVDO1FBZEcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLHFCQUNyQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsd0JBQXdCLENBQUMsSUFDckQsWUFBWSxJQUNmLElBQUksRUFBRTtnQkFDRixVQUFVLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxLQUFLO2dCQUM3QyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSztnQkFDNUMsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUs7Z0JBQzFDLHFCQUFxQixFQUFFLElBQUksQ0FBQyxxQkFBcUI7Z0JBQ2pELE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTthQUN0QixJQUNIO2FBQ0QsT0FBTzthQUNQLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxVQUFBLEtBQUssSUFBSSxPQUFBLENBQUMsQ0FBQyxLQUFLLEVBQVAsQ0FBTyxDQUFDLENBQUM7YUFDN0QsU0FBUyxDQUFDLFVBQUEsS0FBSyxJQUFJLE9BQUEsS0FBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLEVBQWxDLENBQWtDLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRU0seURBQVcsR0FBbEIsVUFBbUIsY0FBeUIsRUFBRSxlQUEwQixFQUFFLFFBQW1CO1FBQTdGLGlCQXNCQztRQXJCRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDO1lBQzdCLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyw0QkFBNEIsQ0FBQztZQUM1RCxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsNkJBQTZCLENBQUM7WUFDOUQsTUFBTSxFQUFFO2dCQUNKLElBQU0sYUFBYSxHQUFHLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDcEUsSUFBTSxLQUFLLEdBQUcsS0FBSSxDQUFDLGtCQUFrQixDQUFDLGNBQWMsRUFBRSxhQUFhLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNoRyxLQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxFQUFFLGFBQWEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFFdkUsSUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUMvQixLQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDO29CQUM1QixFQUFFLEVBQUUsSUFBSSxDQUFDLGVBQWU7b0JBQ3hCLEtBQUssRUFBRSxJQUFJLENBQUMsZ0JBQWdCO2lCQUMvQixDQUFDLENBQUM7Z0JBQ0gsS0FBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUM7b0JBQ3RCLGVBQWUsRUFBRSxJQUFJLENBQUMsZUFBZTtvQkFDckMsZUFBZSxFQUFFLElBQUksQ0FBQyxlQUFlO29CQUNyQyxvQkFBb0IsRUFBRSxJQUFJLENBQUMsb0JBQW9CO29CQUMvQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsZ0JBQWdCO2lCQUMxQyxDQUFDLENBQUM7WUFDUCxDQUFDO1NBQ0osQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVNLHlEQUFXLEdBQWxCO1FBQ0ksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDZCxPQUFPLEtBQUssQ0FBQztTQUNoQjtRQUVELE9BQU87WUFDSCxZQUFZLENBQUMsUUFBUTtZQUNyQixZQUFZLENBQUMsc0JBQXNCO1lBQ25DLFlBQVksQ0FBQyxrQ0FBa0M7WUFDL0MsWUFBWSxDQUFDLHVCQUF1QjtTQUN2QyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQXNCLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRU0sa0VBQW9CLEdBQTNCO1FBQ0ksSUFBSSxJQUFJLENBQUMsc0JBQXNCLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxzQkFBc0IsS0FBSyxTQUFTLEVBQUU7WUFDbkYsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFTSxnRUFBa0IsR0FBekIsVUFBMEIsY0FBeUIsRUFBRSxlQUEwQjtRQUEvRSxpQkFVQztRQVRHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUM7WUFDN0IsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLG9DQUFvQyxDQUFDO1lBQ3BFLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxxQ0FBcUMsQ0FBQztZQUN0RSxNQUFNLEVBQUU7Z0JBQ0osSUFBTSxnQkFBZ0IsR0FBRyxLQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUM5RCxJQUFNLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDO2dCQUNqRSxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDckMsQ0FBQztTQUNKLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyxnRUFBa0IsR0FBMUIsVUFBMkIsV0FBZ0IsRUFBRSxjQUF5QjtRQUNsRSxJQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsRUFBRSxXQUFXLEVBQUcsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUMvRSxJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsMEJBQTBCLENBQUMsV0FBVyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFTyx3RUFBMEIsR0FBbEMsVUFBbUMsV0FBMkIsRUFBRSxjQUF5QjtRQUNyRixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxXQUFXLEVBQUUsWUFBVSxXQUFXLENBQUMsTUFBTSxDQUFDLEVBQUUsTUFBRyxFQUFFLENBQUM7YUFDekYsSUFBSSxDQUNELFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxVQUFDLEVBQVk7Z0JBQVYsc0JBQVE7WUFBTyxPQUFBLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQXRDLENBQXNDLENBQUMsRUFDN0QsTUFBTSxDQUFDLFVBQUEsS0FBSyxJQUFJLE9BQUEsQ0FBQyxDQUFDLEtBQUssRUFBUCxDQUFPLENBQUMsQ0FDM0I7YUFDQSxTQUFTLENBQUMsVUFBQSxNQUFNO1lBQ2IsY0FBYyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ3RFLENBQUMsQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVELDZEQUFlLEdBQWYsVUFBZ0IsY0FBeUI7UUFDckMsSUFBSSxDQUFDLE1BQU0sR0FBRyxjQUFjLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzNDLE9BQU8sY0FBYyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQWMsQ0FBQztJQUNyRCxDQUFDO0lBRU0sZ0VBQWtCLEdBQXpCLFVBQTBCLGNBQStCLEVBQUUsYUFBa0I7O1FBQ3pFLElBQUkscUJBQXFCLEdBQUcsSUFBSSxDQUFDO1FBQ2pDLElBQU0sZ0JBQWdCLEdBQUcsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDOztZQUUxRSxLQUE0QixJQUFBLHFCQUFBLGlCQUFBLGdCQUFnQixDQUFBLGtEQUFBLGdGQUFFO2dCQUF6QyxJQUFJLGVBQWUsNkJBQUE7Z0JBQ3BCLElBQUksZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsS0FBSyxhQUFhLEVBQUU7b0JBQzFFLHFCQUFxQixHQUFHLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztpQkFDaEU7YUFDSjs7Ozs7Ozs7O1FBRUQsT0FBTyxxQkFBa0MsQ0FBQztJQUM5QyxDQUFDO0lBRU0sa0ZBQW9DLEdBQTNDLFVBQTRDLGNBQXlCLEVBQUUsS0FBYTtRQUNoRixJQUFJLElBQUksQ0FBQyxzQkFBc0IsS0FBSyxJQUFJLEVBQUU7WUFDdEMsSUFBSSxDQUFDLGlDQUFpQyxFQUFFLENBQUM7WUFDekMsT0FBTztTQUNWO1FBRUQsSUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsVUFBQSxjQUFjLElBQUksT0FBQSxjQUFjLENBQUMsZUFBZSxLQUFLLEtBQUssQ0FBQyxFQUFFLEVBQTNDLENBQTJDLENBQUMsQ0FBQztRQUN6RyxJQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMxRixJQUFJLFNBQVMsS0FBSyxJQUFJLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRTtZQUN6QyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUM5QztRQUVELElBQUksQ0FBQyx1Q0FBdUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRU0scUZBQXVDLEdBQTlDLFVBQStDLEtBQWE7UUFDeEQsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2hGLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsVUFBQSxjQUFjLElBQUksT0FBQSxjQUFjLENBQUMsZUFBZSxLQUFLLEtBQUssQ0FBQyxFQUFFLEVBQTNDLENBQTJDLENBQUMsQ0FBQztJQUN0SCxDQUFDO0lBRU8sZ0VBQWtCLEdBQTFCLFVBQTJCLElBQWM7UUFBZCxxQkFBQSxFQUFBLFNBQWM7UUFDckMsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztZQUMxQixXQUFXLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUM7WUFDcEQsS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztTQUNwQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8seURBQVcsR0FBbkIsVUFBb0IsSUFBYztRQUFkLHFCQUFBLEVBQUEsU0FBYztRQUM5QixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO1lBQzFCLGVBQWUsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUM7WUFDdkMsZUFBZSxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQztZQUN2QyxvQkFBb0IsRUFBRSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztZQUNqRCxnQkFBZ0IsRUFBRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztTQUM1QyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sK0VBQWlDLEdBQXpDO1FBQ0ksSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsaUNBQWlDLEVBQUUseUNBQXlDLENBQUMsQ0FBQztJQUMzRyxDQUFDO0lBRU8seURBQVcsR0FBbkIsVUFBb0IsS0FBVSxFQUFFLGNBQXlCO1FBQ3JELElBQUksSUFBSSxDQUFDLHNCQUFzQixLQUFLLElBQUksRUFBRTtZQUN0QyxJQUFJLENBQUMsaUNBQWlDLEVBQUUsQ0FBQztZQUN6QyxPQUFPO1NBQ1Y7UUFFRCxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRTtZQUN0QixJQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMxRixJQUFJLFNBQVMsS0FBSyxJQUFJLEVBQUU7Z0JBQ3BCLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2FBQzNDO1lBQ0QsT0FBTztTQUNWO1FBRUQsSUFBTSxnQkFBZ0IsR0FBSSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQWUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQUMsSUFBSSxJQUFLLE9BQUEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsSUFBSSxFQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxLQUFLLENBQUMsVUFBVSxDQUFDLEVBQUUsRUFBckUsQ0FBcUUsQ0FBQyxDQUFDO1FBQ2xLLElBQUEseUJBQVEsQ0FBVztRQUMzQixJQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1lBQzlCLGVBQWUsRUFBRSxRQUFRLENBQUMsS0FBSztZQUMvQixlQUFlLEVBQUUsUUFBUSxDQUFDLEtBQUs7WUFDL0Isb0JBQW9CLEVBQUUsUUFBUSxDQUFDLFVBQVU7WUFDekMsZ0JBQWdCLEVBQUUsUUFBUSxDQUFDLE1BQU07U0FDcEMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLENBQUMsZ0JBQWdCLEVBQUU7WUFDcEIsSUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM1RixTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3pCLElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixDQUFDLENBQUM7U0FDMUU7YUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxLQUFLLEVBQUU7WUFDaEQsY0FBYyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztZQUM1RSxjQUFjLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztZQUNoRyxJQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMxRixTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3pCLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxFQUFFLFlBQVksRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1NBQ3hFO2FBQU07WUFDSCxJQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxFQUFFLGdCQUFnQixFQUFFLGNBQWMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzFKLElBQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3RGLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDekIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixDQUFDLENBQUM7U0FDcEU7SUFDTCxDQUFDO0lBRU8sd0RBQVUsR0FBbEIsVUFBbUIsUUFBZ0IsRUFBRSxPQUFlLEVBQUUsTUFBYztRQUNoRSxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQztZQUNwQixRQUFRLFVBQUE7WUFDUixPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO1lBQ3hDLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7U0FDekMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLCtEQUFpQixHQUF6QjtRQUNJLElBQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDM0MsS0FBSyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztRQUNyQyxJQUFNLGNBQWMsR0FBRyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFM0QsSUFBSSxZQUFZLEdBQVUsY0FBYyxDQUFDLFlBQVksQ0FBQztRQUN0RCxjQUFjLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxVQUFBLFFBQVE7WUFDeEMsY0FBYyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsVUFBQSxTQUFTO2dCQUN6QyxJQUFJLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRSxLQUFLLFNBQVMsQ0FBQyxVQUFVLENBQUMsRUFBRTtvQkFDbEQsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsS0FBSyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxFQUFFO29CQUNoRSxZQUFZLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUMxRTtZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7UUFDSCxjQUFjLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztRQUczQyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUU7WUFDM0IsT0FBTyxJQUFJLENBQUMsNkJBQTZCLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1NBQ3BFO2FBQU07WUFDSCxPQUFPLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1NBQzdGO0lBQ0wsQ0FBQztJQUVPLDBEQUFZLEdBQXBCO1FBQ0ksT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztZQUMxQixFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUM7WUFDZixNQUFNLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUM7WUFDcEUsWUFBWSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN4QyxPQUFPLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDO1lBQy9DLFNBQVMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDakQsY0FBYyxFQUFFLENBQUMsU0FBUyxDQUFDO1lBQzNCLEtBQUssRUFBRSxDQUFDLFNBQVMsQ0FBQztZQUNsQixNQUFNLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUM7U0FDdEUsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLG1FQUFxQixHQUE3QixVQUE4QixTQUFvQjtRQUFsRCxpQkFXQztRQVZHLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFBLEtBQUs7WUFDekMsSUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNyQyxJQUFJLE9BQU8sWUFBWSxXQUFXLEVBQUU7Z0JBQ25DLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQzthQUN4QztpQkFBTSxJQUFJLE9BQU8sWUFBWSxTQUFTLEVBQUM7Z0JBQ3BDLEtBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUN2QztpQkFBTSxJQUFJLE9BQU8sWUFBWSxTQUFTLEVBQUU7Z0JBQ3JDLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQUMsSUFBZSxJQUFLLE9BQUEsS0FBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxFQUFoQyxDQUFnQyxDQUFDLENBQUM7YUFDbkY7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyx5REFBVyxHQUFuQixVQUFvQixRQUFvQztRQUNwRCxJQUFNLE1BQU0sR0FBRyxDQUFDLFFBQVEsQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDdkYsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULE9BQU87U0FDVjtRQUVELElBQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3JELElBQU0sZ0JBQWdCLEdBQUcsY0FBYyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUV6RSxJQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQUMsRUFBUztnQkFBUCxnQkFBSztZQUFPLE9BQUEsS0FBSyxDQUFDLFVBQVUsQ0FBQyxFQUFFLEtBQUssVUFBVSxDQUFDLEVBQUU7UUFBckMsQ0FBcUMsQ0FBYyxDQUFDO1FBQ25JLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDakIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLFVBQVUsWUFBQSxFQUFFLGdCQUFnQixrQkFBQSxFQUFFLENBQUMsQ0FBQztZQUNyRCxJQUFJLENBQUMsdUJBQXVCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDckMsT0FBTztTQUNWO1FBRUQsSUFBSSxDQUFDLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFTyxxRUFBdUIsR0FBL0IsVUFBZ0MsS0FBVTtRQUN0QyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDO1lBQzVCLEVBQUUsRUFBRSxJQUFJLENBQUMsZUFBZTtZQUN4QixLQUFLLEVBQUUsS0FBSyxDQUFDLE1BQU07U0FDdEIsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUM7WUFDdEIsZUFBZSxFQUFFLElBQUksQ0FBQyxlQUFlO1lBQ3JDLGVBQWUsRUFBRSxLQUFLLENBQUMsS0FBSztZQUM1QixvQkFBb0IsRUFBRSxLQUFLLENBQUMsVUFBVTtZQUN0QyxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsTUFBTTtTQUNqQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsZUFBZSxHQUFHLFNBQVMsQ0FBQztRQUNqQyxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUN6QixDQUFDO0lBRU8sNkRBQWUsR0FBdkI7UUFDSSxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztJQUMvQixDQUFDO0lBRU8sMERBQVksR0FBcEI7UUFDSSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztJQUM5QixDQUFDO0lBRU8sa0VBQW9CLEdBQTVCO1FBQ0ksSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUM7WUFDcEIsUUFBUSxFQUFFLE1BQU07WUFDaEIsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLDZCQUE2QixDQUFDO1lBQzlELE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyw0QkFBNEIsQ0FBQztZQUM1RCxJQUFJLEVBQUUsSUFBSTtTQUNiLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTywyREFBYSxHQUFyQixVQUFzQixTQUEwQjtRQUFFLGNBQWlCO2FBQWpCLFVBQWlCLEVBQWpCLHFCQUFpQixFQUFqQixJQUFpQjtZQUFqQiw2QkFBaUI7O1FBQy9ELElBQUksQ0FBQyxPQUFPLENBQUMsVUFBQSxHQUFHLElBQUksT0FBQSxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUE1QixDQUE0QixDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVPLHNFQUF3QixHQUFoQztRQUNJLE9BQU87WUFDSCxJQUFJLFNBQVMsQ0FBQztnQkFDVixJQUFJLEVBQUUsV0FBVztnQkFDakIsSUFBSSxFQUFFLFNBQVMsQ0FBQyxNQUFNO2dCQUN0QixLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsNkJBQTZCLENBQUM7YUFDL0QsQ0FBQztZQUNGLElBQUksU0FBUyxDQUFDO2dCQUNWLElBQUksRUFBRSxRQUFRO2dCQUNkLElBQUksRUFBRSxTQUFTLENBQUMsTUFBTTtnQkFDdEIsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLDBCQUEwQixDQUFDO2FBQzVELENBQUM7U0FDTCxDQUFDO0lBQ04sQ0FBQztJQUVPLG1FQUFxQixHQUE3QjtRQUNJLE9BQU87WUFDSCxJQUFJLFNBQVMsQ0FBQztnQkFDVixJQUFJLEVBQUUsTUFBTTtnQkFDWixJQUFJLEVBQUUsU0FBUyxDQUFDLE1BQU07Z0JBQ3RCLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQzthQUN2RCxDQUFDO1lBQ0YsSUFBSSxTQUFTLENBQUM7Z0JBQ1YsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsSUFBSSxFQUFFLFNBQVMsQ0FBQyxPQUFPO2dCQUN2QixLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUM7YUFDekQsQ0FBQztTQUNMLENBQUM7SUFDTixDQUFDO0lBRU8sdUVBQXlCLEdBQWpDO1FBQ0ksT0FBTztZQUNILElBQUksU0FBUyxDQUFDO2dCQUNWLElBQUksRUFBRSxNQUFNO2dCQUNaLElBQUksRUFBRSxTQUFTLENBQUMsTUFBTTtnQkFDdEIsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLHFCQUFxQixDQUFDO2FBQ3ZELENBQUM7WUFDRixJQUFJLFNBQVMsQ0FBQztnQkFDVixJQUFJLEVBQUUsUUFBUTtnQkFDZCxJQUFJLEVBQUUsU0FBUyxDQUFDLE9BQU87Z0JBQ3ZCLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQzthQUN6RCxDQUFDO1lBQ0YsSUFBSSxTQUFTLENBQUM7Z0JBQ1YsSUFBSSxFQUFFLGNBQWM7Z0JBQ3BCLElBQUksRUFBRSxTQUFTLENBQUMsTUFBTTtnQkFDdEIsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDO2FBQ25ELENBQUM7U0FDTCxDQUFDO0lBQ04sQ0FBQztJQUVPLHVFQUF5QixHQUFqQztRQUNJLE9BQU87WUFDSCxJQUFJLFNBQVMsQ0FBQztnQkFDVixJQUFJLEVBQUUsTUFBTTtnQkFDWixJQUFJLEVBQUUsU0FBUyxDQUFDLE1BQU07Z0JBQ3RCLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQzthQUN2RCxDQUFDO1lBQ0YsSUFBSSxTQUFTLENBQUM7Z0JBQ1YsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsSUFBSSxFQUFFLFNBQVMsQ0FBQyxPQUFPO2dCQUN2QixLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUM7YUFDekQsQ0FBQztZQUNGLElBQUksU0FBUyxDQUFDO2dCQUNWLElBQUksRUFBRSxTQUFTO2dCQUNmLElBQUksRUFBRSxTQUFTLENBQUMsTUFBTTtnQkFDdEIsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLHdCQUF3QixDQUFDO2FBQzFELENBQUM7U0FDTCxDQUFDO0lBQ04sQ0FBQztJQUVPLDZFQUErQixHQUF2QztRQUNJLE9BQU87WUFDSCxJQUFJLFNBQVMsQ0FBQztnQkFDVixJQUFJLEVBQUUsUUFBUTtnQkFDZCxJQUFJLEVBQUUsU0FBUyxDQUFDLE9BQU87Z0JBQ3ZCLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxnQ0FBZ0MsQ0FBQzthQUNsRSxDQUFDO1lBQ0YsSUFBSSxTQUFTLENBQUM7Z0JBQ1YsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsSUFBSSxFQUFFLFNBQVMsQ0FBQyxNQUFNO2dCQUN0QixLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsZ0NBQWdDLENBQUM7YUFDbEUsQ0FBQztZQUNGLElBQUksU0FBUyxDQUFDO2dCQUNWLElBQUksRUFBRSxVQUFVO2dCQUNoQixJQUFJLEVBQUUsU0FBUyxDQUFDLE1BQU07Z0JBQ3RCLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxrQ0FBa0MsQ0FBQzthQUNwRSxDQUFDO1NBQ0wsQ0FBQztJQUNOLENBQUM7SUFFTyxvRUFBc0IsR0FBOUI7UUFDSSxPQUFPO1lBQ0gsSUFBSSxTQUFTLENBQUM7Z0JBQ1YsSUFBSSxFQUFFLFdBQVc7Z0JBQ2pCLElBQUksRUFBRSxTQUFTLENBQUMsTUFBTTtnQkFDdEIsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLDJCQUEyQixDQUFDO2FBQzdELENBQUM7WUFDRixJQUFJLFNBQVMsQ0FBQztnQkFDVixJQUFJLEVBQUUsUUFBUTtnQkFDZCxJQUFJLEVBQUUsU0FBUyxDQUFDLE1BQU07Z0JBQ3RCLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQzthQUMxRCxDQUFDO1NBQ0wsQ0FBQztJQUNOLENBQUM7SUFFTyxrRUFBb0IsR0FBNUI7UUFDSSxPQUFPO1lBQ0gsSUFBSSxTQUFTLENBQUM7Z0JBQ1YsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsSUFBSSxFQUFFLFNBQVMsQ0FBQyxNQUFNO2dCQUN0QixLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUM7YUFDeEQsQ0FBQztZQUNGLElBQUksU0FBUyxDQUFDO2dCQUNWLElBQUksRUFBRSxXQUFXO2dCQUNqQixJQUFJLEVBQUUsU0FBUyxDQUFDLE1BQU07Z0JBQ3RCLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyx5QkFBeUIsQ0FBQzthQUMzRCxDQUFDO1NBQ0wsQ0FBQztJQUNOLENBQUM7SUFFTyxzRUFBd0IsR0FBaEM7UUFDSSxPQUFPO1lBQ0gsSUFBSSxTQUFTLENBQUM7Z0JBQ1YsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsSUFBSSxFQUFFLFNBQVMsQ0FBQyxNQUFNO2dCQUN0QixLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUM7YUFDeEQsQ0FBQztZQUNGLElBQUksU0FBUyxDQUFDO2dCQUNWLElBQUksRUFBRSxXQUFXO2dCQUNqQixJQUFJLEVBQUUsU0FBUyxDQUFDLE1BQU07Z0JBQ3RCLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyx5QkFBeUIsQ0FBQzthQUMzRCxDQUFDO1lBQ0YsSUFBSSxTQUFTLENBQUM7Z0JBQ1YsSUFBSSxFQUFFLGNBQWM7Z0JBQ3BCLElBQUksRUFBRSxTQUFTLENBQUMsTUFBTTtnQkFDdEIsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDO2FBQ3pELENBQUM7U0FDTCxDQUFDO0lBQ04sQ0FBQztJQUVPLDJFQUE2QixHQUFyQztRQUNJLE9BQU87WUFDSCxJQUFJLFNBQVMsQ0FBQztnQkFDVixJQUFJLEVBQUUsUUFBUTtnQkFDZCxJQUFJLEVBQUUsU0FBUyxDQUFDLE9BQU87Z0JBQ3ZCLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQywrQkFBK0IsQ0FBQzthQUNqRSxDQUFDO1lBQ0YsSUFBSSxTQUFTLENBQUM7Z0JBQ1YsSUFBSSxFQUFFLGFBQWE7Z0JBQ25CLElBQUksRUFBRSxTQUFTLENBQUMsTUFBTTtnQkFDdEIsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLGtDQUFrQyxDQUFDO2FBQ3BFLENBQUM7WUFDRixJQUFJLFNBQVMsQ0FBQztnQkFDVixJQUFJLEVBQUUsZ0JBQWdCO2dCQUN0QixJQUFJLEVBQUUsU0FBUyxDQUFDLE1BQU07Z0JBQ3RCLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQzthQUMvRCxDQUFDO1NBQ0wsQ0FBQztJQUNOLENBQUM7SUFFTywrRUFBaUMsR0FBekM7UUFDSSxPQUFPO1lBQ0gsSUFBSSxTQUFTLENBQUM7Z0JBQ1YsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsSUFBSSxFQUFFLFNBQVMsQ0FBQyxPQUFPO2dCQUN2QixLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsK0JBQStCLENBQUM7YUFDakUsQ0FBQztZQUNGLElBQUksU0FBUyxDQUFDO2dCQUNWLElBQUksRUFBRSxhQUFhO2dCQUNuQixJQUFJLEVBQUUsU0FBUyxDQUFDLE9BQU87Z0JBQ3ZCLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQzthQUN2RCxDQUFDO1lBQ0YsSUFBSSxTQUFTLENBQUM7Z0JBQ1YsSUFBSSxFQUFFLGdCQUFnQjtnQkFDdEIsSUFBSSxFQUFFLFNBQVMsQ0FBQyxNQUFNO2dCQUN0QixLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsNkJBQTZCLENBQUM7YUFDL0QsQ0FBQztTQUNMLENBQUM7SUFDTixDQUFDO0lBRU8sa0VBQW9CLEdBQTVCO1FBQ0ksT0FBTztZQUNILElBQUksU0FBUyxDQUFDO2dCQUNWLElBQUksRUFBRSxRQUFRO2dCQUNkLElBQUksRUFBRSxTQUFTLENBQUMsTUFBTTtnQkFDdEIsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLDZCQUE2QixDQUFDO2FBQy9ELENBQUM7WUFDRixJQUFJLFNBQVMsQ0FBQztnQkFDVixJQUFJLEVBQUUsY0FBYztnQkFDcEIsSUFBSSxFQUFFLFNBQVMsQ0FBQyxNQUFNO2dCQUN0QixLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUM7YUFDbkQsQ0FBQztZQUNGLElBQUksU0FBUyxDQUFDO2dCQUNWLElBQUksRUFBRSxhQUFhO2dCQUNuQixJQUFJLEVBQUUsU0FBUyxDQUFDLE1BQU07Z0JBQ3RCLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQzthQUNsRCxDQUFDO1NBQ0wsQ0FBQztJQUNOLENBQUM7SUFFTyxzRUFBd0IsR0FBaEM7UUFDSSxPQUFPO1lBQ0gsSUFBSSxTQUFTLENBQUM7Z0JBQ1YsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsSUFBSSxFQUFFLFNBQVMsQ0FBQyxPQUFPO2dCQUN2QixLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsNkJBQTZCLENBQUM7YUFDL0QsQ0FBQztZQUNGLElBQUksU0FBUyxDQUFDO2dCQUNWLElBQUksRUFBRSxjQUFjO2dCQUNwQixJQUFJLEVBQUUsU0FBUyxDQUFDLE1BQU07Z0JBQ3RCLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQzthQUNuRCxDQUFDO1lBQ0YsSUFBSSxTQUFTLENBQUM7Z0JBQ1YsSUFBSSxFQUFFLGFBQWE7Z0JBQ25CLElBQUksRUFBRSxTQUFTLENBQUMsTUFBTTtnQkFDdEIsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDO2FBQ2xELENBQUM7WUFDRixJQUFJLFNBQVMsQ0FBQztnQkFDVixJQUFJLEVBQUUsYUFBYTtnQkFDbkIsSUFBSSxFQUFFLFNBQVMsQ0FBQyxNQUFNO2dCQUN0QixLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMscUJBQXFCLENBQUM7YUFDdkQsQ0FBQztTQUNMLENBQUM7SUFDTixDQUFDO0lBanNDUTtRQUFSLEtBQUssRUFBRTswQ0FBaUIsTUFBTTt1RUFBQztJQTdGdkIsbUNBQW1DO1FBUC9DLFNBQVMsQ0FBQztZQUNQLFFBQVEsRUFBRSwrQkFBK0I7WUFDekMsK2dlQUE2RDtZQUU3RCxTQUFTLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQzs7U0FDbkMsQ0FBQztpREF3RzJCLFdBQVc7WUFDYixnQkFBZ0I7WUFDWixhQUFhO1lBQ2IsYUFBYTtZQUNaLGNBQWM7WUFDWixnQkFBZ0I7WUFDWCxxQkFBcUI7WUFDeEIsa0JBQWtCO1lBQ1AsNkJBQTZCO1lBQzVDLGNBQWM7WUFDdkIsY0FBYztZQUNiLE1BQU07WUFDVyxxQkFBcUI7WUFDaEMsWUFBWTtZQUNoQiw0Q0FBNEM7WUFDaEMsb0JBQW9CO1lBQ3JCLG1CQUFtQjtZQUN6QixhQUFhO1lBQ2IsYUFBYTtZQUNULGlCQUFpQjtZQUNkLG9CQUFvQjtZQUN0QixrQkFBa0I7WUFDcEIsZ0JBQWdCO09BNUhyQyxtQ0FBbUMsQ0F3eUMvQztJQUFELDBDQUFDO0NBQUEsQUF4eUNELElBd3lDQztTQXh5Q1ksbUNBQW1DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVmVyaWZpY2FOb3RhZmlzY2FsIH0gZnJvbSAnLi4vLi4vY29yZS92ZXJpZmljYS1ub3RhLWZpc2NhbC92ZXJpZmljYU5vdGFGaXNjYWwnO1xuaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtQXJyYXksIEZvcm1CdWlsZGVyLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gXCJAbmd4LXRyYW5zbGF0ZS9jb3JlXCI7XG5pbXBvcnQgeyBGaWVsZFR5cGUsIEZvcm1GaWVsZCwgSVRva2VuIH0gZnJvbSBcIkBzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHNcIjtcbmltcG9ydCAqIGFzIF9tb21lbnQgZnJvbSBcIm1vbWVudFwiO1xuaW1wb3J0IHsgQ29uZmlybWF0aW9uU2VydmljZSwgRGlhbG9nU2VydmljZSwgTWVzc2FnZVNlcnZpY2UsIFNvcnRNZXRhIH0gZnJvbSBcInByaW1lbmcvYXBpXCI7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IGNvbmNhdE1hcCwgZGVib3VuY2VUaW1lLCBmaWx0ZXIsIGZpbmFsaXplLCBtYXAsIG1lcmdlTWFwLCB0YWtlVW50aWwgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcbmltcG9ydCB7IGdldExvb2t1cExhYmVsLCBvbkxvb2t1cFJlcXVlc3QsIG9uU2VhcmNoUmVxdWVzdCB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9sb29rdXAtdXRpbHNcIjtcbmltcG9ydCB7IGRpYWxvZ0NvbmZpZywgaXNWYWxpZEZpbHRlciB9IGZyb20gXCIuLi8uLi8uLi91dGlscy91dGlsc1wiO1xuaW1wb3J0IHsgTm90YUZvcm1Db21wb25lbnQgfSBmcm9tIFwiLi4vLi4vY29tcG9uZW50cy9ub3RhLWZvcm0vbm90YS1mb3JtLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgQWdlbmRhIH0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvYWdlbmRhL2FnZW5kYVwiO1xuaW1wb3J0IHsgQWdlbmRhU2VydmljZSB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL2FnZW5kYS9hZ2VuZGEuc2VydmljZVwiO1xuaW1wb3J0IHsgRGVyaXZhY2FvIH0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvZGVyaXZhY2FvL2Rlcml2YWNhb1wiO1xuaW1wb3J0IHsgRGVyaXZhY2FvU2VydmljZSB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL2Rlcml2YWNhby9kZXJpdmFjYW8uc2VydmljZVwiO1xuaW1wb3J0IHsgRmlsaWFsIH0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvZmlsaWFsL2ZpbGlhbFwiO1xuaW1wb3J0IHsgRmlsaWFsU2VydmljZSwgUGVzcXVpc2FyRmlsaWFpc0lucHV0IH0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvZmlsaWFsL2ZpbGlhbC5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBPcmRlbUNvbXByYSB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL29yZGVtLWNvbXByYS9vcmRlbS1jb21wcmFcIjtcbmltcG9ydCB7IE9yZGVtQ29tcHJhU2VydmljZSB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL29yZGVtLWNvbXByYS9vcmRlbS1jb21wcmEuc2VydmljZVwiO1xuaW1wb3J0IHsgUGVzc29hRW5kZXJlY28gfSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy9wZXNzb2EtZW5kZXJlY28vcGVzc29hLWVuZGVyZWNvXCI7XG5pbXBvcnQgeyBQZXNzb2FFbmRlcmVjb1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy9wZXNzb2EtZW5kZXJlY28vcGVzc29hLWVuZGVyZWNvLnNlcnZpY2VcIjtcbmltcG9ydCB7IFBlc3NvYSB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL3Blc3NvYS9wZXNzb2FcIjtcbmltcG9ydCB7IFBlc3NvYVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy9wZXNzb2EvcGVzc29hLnNlcnZpY2VcIjtcbmltcG9ydCB7IFByb2R1dG8gfSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy9wcm9kdXRvL3Byb2R1dG9cIjtcbmltcG9ydCB7IFByb2R1dG9QYXJhbXMsIFByb2R1dG9TZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvcHJvZHV0by9wcm9kdXRvLnNlcnZpY2VcIjtcbmltcG9ydCB7IFJlY2ViaW1lbnRvT3JkZW1Db21wcmEgfSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy9yZWNlYmltZW50by1vcmRlbS1jb21wcmEvcmVjZWJpbWVudG8tb3JkZW0tY29tcHJhXCI7XG5pbXBvcnQgeyBSZWNlYmltZW50b09yZGVtQ29tcHJhRHRvIH0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvcmVjZWJpbWVudG8tb3JkZW0tY29tcHJhL3JlY2ViaW1lbnRvLW9yZGVtLWNvbXByYS1kdG9cIjtcbmltcG9ydCB7IFJlY2ViaW1lbnRvT3JkZW1Db21wcmFTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvcmVjZWJpbWVudG8tb3JkZW0tY29tcHJhL3JlY2ViaW1lbnRvLW9yZGVtLWNvbXByYS5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBTYWZyYSB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL3NhZnJhL3NhZnJhXCI7XG5pbXBvcnQgeyBTYWZyYVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy9zYWZyYS9zYWZyYS5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBUcmFuc3BvcnRhZG9yYSB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL3RyYW5zcG9ydGFkb3JhL3RyYW5zcG9ydGFkb3JhXCI7XG5pbXBvcnQgeyBUcmFuc3BvcnRhZG9yYVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy90cmFuc3BvcnRhZG9yYS90cmFuc3BvcnRhZG9yYS5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBOb3RhVmFsaWRhdG9yU2VydmljZSwgUGVzcXVpc2FyRG9jdW1lbnRvUmVzcG9uc2UgfSBmcm9tIFwiLi4vLi4vY29yZS9ub3RhLXZhbGlkYXRvci5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBSZWNlYmltZW50b09yZGVtQ29tcHJhQ2hlZ2FkYVZlaWN1bG9PdmVycmlkZSB9IGZyb20gXCIuLi9yZWNlYmltZW50by1vcmRlbS1jb21wcmEtY2hlZ2FkYS12ZWljdWxvLm92ZXJyaWRlXCI7XG5pbXBvcnQgeyBTdGF0dXNBZ2VuZGEgfSBmcm9tIFwiLi8uLi8uLi9jb3JlL2VudW1zL3N0YXR1cy1hZ2VuZGFcIjtcbmltcG9ydCB7IE9yZGVtQ29tcHJhRm9ybUNvbXBvbmVudCB9IGZyb20gJy4vLi4vb3JkZW0tY29tcHJhLWZvcm0vb3JkZW0tY29tcHJhLWZvcm0uY29tcG9uZW50JztcbmltcG9ydCB7IEVycFByb2Nlc3NEYXRhIH0gZnJvbSBcIi4uLy4uL2NvcmUvZXJwLXByb2Nlc3MtZGF0YS9lcnAtcHJvY2Vzcy1kYXRhXCI7XG5pbXBvcnQgeyBFcnBQcm9jZXNzU2VydmljZSB9IGZyb20gXCIuLi8uLi9jb3JlL2VycC1wcm9jZXNzLWRhdGEvZXJwLXByb2Nlc3Mtc2VydmljZVwiO1xuaW1wb3J0IHsgRXJwRm9ybUNvbmZpZ1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vY29yZS9lcnAtZm9ybS1jb25maWcvZXJwLWZvcm0tY29uZmlnLXNlcnZpY2VcIjtcbmltcG9ydCB7IE9yZGVtQ29tcHJhRHRvIH0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvb3JkZW0tY29tcHJhL29yZGVtLWNvbXByYS1kdG9cIjtcbmltcG9ydCB7IEhhc0NoYW5nZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL2hhcy1jaGFuZ2UvaGFzLWNoYW5nZS1zZXJ2aWNlJztcblxuY29uc3QgbW9tZW50ID0gX21vbWVudDtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdyZWNlYmltZW50by1vcmRlbS1jb21wcmEtZm9ybScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3JlY2ViaW1lbnRvLW9yZGVtLWNvbXByYS1mb3JtLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi4vLi4vZXJwLXNlbmlvci5zY3NzJ10sXG4gICAgcHJvdmlkZXJzOiBbQ29uZmlybWF0aW9uU2VydmljZV1cbn0pXG5cbmV4cG9ydCBjbGFzcyBSZWNlYmltZW50b09yZGVtQ29tcHJhRm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0IHtcbiAgICBmb3JtR3JvdXA6IEZvcm1Hcm91cDtcblxuICAgIGRlcml2YWNhb1NlYXJjaEZpZWxkczogRm9ybUZpZWxkW107XG4gICAgZGVyaXZhY2FvU2VhcmNoR3JpZERhdGE6IERlcml2YWNhb1tdO1xuICAgIGRlcml2YWNhb0xvb2t1cERpc3BsYXlGaWVsZHMgPSBbXCJjb2RpZ29cIiwgXCJkZXNjcmljYW9cIl07XG4gICAgZGVyaXZhY2FvQWR2YW5jZWREaXNwbGF5RmllbGRzID0gW1wiaWRcIiwgXCJjb2RpZ29cIiwgXCJkZXNjcmljYW9cIl07XG4gICAgZGVyaXZhY2FvTG9va3VwU2VwYXJhdG9yID0gXCIgLSBcIjtcbiAgICBkZXJpdmFjYW9Mb29rdXBTdWdnZXN0aW9uczogRGVyaXZhY2FvW107XG4gICAgZGVyaXZhY2FvU2VhcmNoVG90YWxSZWNvcmRzOiBudW1iZXI7XG5cbiAgICBmaWxpYWxTZWFyY2hGaWVsZHM6IEZvcm1GaWVsZFtdO1xuICAgIGZpbGlhbFNlYXJjaEdyaWRGaWVsZHM6IEZvcm1GaWVsZFtdO1xuICAgIGZpbGlhbFNlYXJjaEdyaWREYXRhOiBGaWxpYWxbXTtcbiAgICBmaWxpYWxMb29rdXBEaXNwbGF5RmllbGRzID0gW1wiY29kaWdvXCIsIFwibm9tZVwiLCBcImVtcHJlc2Eubm9tZVwiXTtcbiAgICBmaWxpYWxBZHZhbmNlZERpc3BsYXlGaWVsZHMgPSBbXCJpZFwiLCBcImNvZGlnb1wiLCBcIm5vbWVcIiwgXCJlbXByZXNhLm5vbWVcIl07XG4gICAgZmlsaWFsTG9va3VwU2VwYXJhdG9yID0gXCIgLSBcIjtcbiAgICBmaWxpYWxMb29rdXBTdWdnZXN0aW9uczogRmlsaWFsW107XG4gICAgZmlsaWFsU2VhcmNoVG90YWxSZWNvcmRzOiBudW1iZXI7XG5cbiAgICBmb3JuZWNlZG9yU2VhcmNoRmllbGRzOiBGb3JtRmllbGRbXTtcbiAgICBmb3JuZWNlZG9yU2VhcmNoR3JpZERhdGE6IFBlc3NvYVtdO1xuICAgIGZvcm5lY2Vkb3JMb29rdXBEaXNwbGF5RmllbGRzID0gW1wiY29kaWdvXCIsIFwibm9tZVwiLCBcImNwZkNucGpcIl07XG4gICAgZm9ybmVjZWRvckFkdmFuY2VkRGlzcGxheUZpZWxkcyA9IFtcImlkXCIsIFwiY29kaWdvXCIsIFwibm9tZVwiXTtcbiAgICBmb3JuZWNlZG9yTG9va3VwU2VwYXJhdG9yID0gXCIgLSBcIjtcbiAgICBmb3JuZWNlZG9yTG9va3VwU3VnZ2VzdGlvbnM6IFBlc3NvYVtdO1xuICAgIGZvcm5lY2Vkb3JTZWFyY2hUb3RhbFJlY29yZHM6IG51bWJlcjtcblxuICAgIG9yZGVtQ29tcHJhU2VhcmNoRmllbGRzOiBGb3JtRmllbGRbXTtcbiAgICBvcmRlbUNvbXByYVNlYXJjaEdyaWRGaWVsZHM6IEZvcm1GaWVsZFtdO1xuICAgIG9yZGVtQ29tcHJhU2VhcmNoR3JpZERhdGE6IE9yZGVtQ29tcHJhW107XG4gICAgb3JkZW1Db21wcmFMb29rdXBEaXNwbGF5RmllbGRzID0gW1wiY29kaWdvXCIsIFwiZW1wcmVzYS5ub21lXCJdO1xuICAgIG9yZGVtQ29tcHJhQWR2YW5jZWREaXNwbGF5RmllbGRzID0gW1wiaWRcIiwgXCJjb2RpZ29cIiwgXCJlbXByZXNhLm5vbWVcIiwgXCJmaWxpYWwubm9tZVwiLCBcInBlc3NvYS5ub21lXCJdO1xuICAgIG9yZGVtQ29tcHJhTG9va3VwU2VwYXJhdG9yID0gXCIgLSBcIjtcbiAgICBvcmRlbUNvbXByYUxvb2t1cFN1Z2dlc3Rpb25zOiBPcmRlbUNvbXByYVtdO1xuICAgIG9yZGVtQ29tcHJhU2VhcmNoVG90YWxSZWNvcmRzOiBudW1iZXI7XG5cbiAgICBvcmlnZW1NZXJjYWRvcmlhU2VhcmNoRmllbGRzOiBGb3JtRmllbGRbXTtcbiAgICBvcmlnZW1NZXJjYWRvcmlhU2VhcmNoR3JpZERhdGE6IFBlc3NvYUVuZGVyZWNvW107XG4gICAgb3JpZ2VtTWVyY2Fkb3JpYUxvb2t1cERpc3BsYXlGaWVsZHMgPSBbXCJjb2RpZ29cIiwgXCJlbmRlcmVjb1wiXTtcbiAgICBvcmlnZW1NZXJjYWRvcmlhQWR2YW5jZWREaXNwbGF5RmllbGRzID0gW1wiaWRcIiwgXCJjb2RpZ29cIiwgXCJlbmRlcmVjb1wiLCBcIm51bWVyb1wiXTtcbiAgICBvcmlnZW1NZXJjYWRvcmlhTG9va3VwU2VwYXJhdG9yID0gXCIgLSBcIjtcbiAgICBvcmlnZW1NZXJjYWRvcmlhTG9va3VwU3VnZ2VzdGlvbnM6IFBlc3NvYUVuZGVyZWNvW107XG4gICAgb3JpZ2VtTWVyY2Fkb3JpYVNlYXJjaFRvdGFsUmVjb3JkczogbnVtYmVyO1xuXG4gICAgcHJvZHV0b1NlYXJjaEZpZWxkczogRm9ybUZpZWxkW107XG4gICAgcHJvZHV0b1NlYXJjaEdyaWREYXRhOiBQcm9kdXRvW107XG4gICAgcHJvZHV0b0xvb2t1cERpc3BsYXlGaWVsZHMgPSBbXCJjb2RpZ29cIiwgXCJkZXNjcmljYW9cIl07XG4gICAgcHJvZHV0b0FkdmFuY2VkRGlzcGxheUZpZWxkcyA9IFtcImlkXCIsIFwiY29kaWdvXCIsIFwiZGVzY3JpY2FvXCJdO1xuICAgIHByb2R1dG9Mb29rdXBTZXBhcmF0b3IgPSBcIiAtIFwiO1xuICAgIHByb2R1dG9Mb29rdXBTdWdnZXN0aW9uczogUHJvZHV0b1tdO1xuICAgIHByb2R1dG9TZWFyY2hUb3RhbFJlY29yZHM6IG51bWJlcjtcblxuICAgIHNhZnJhU2VhcmNoRmllbGRzOiBGb3JtRmllbGRbXTtcbiAgICBzYWZyYVNlYXJjaEdyaWRGaWVsZHM6IEZvcm1GaWVsZFtdO1xuICAgIHNhZnJhU2VhcmNoR3JpZERhdGE6IFNhZnJhW107XG4gICAgc2FmcmFMb29rdXBEaXNwbGF5RmllbGRzID0gW1wiY29kaWdvXCIsIFwiZGVzY3JpY2FvXCJdO1xuICAgIHNhZnJhQWR2YW5jZWREaXNwbGF5RmllbGRzID0gW1wiaWRcIiwgXCJjb2RpZ29cIiwgXCJkZXNjcmljYW9cIl07XG4gICAgc2FmcmFMb29rdXBTZXBhcmF0b3IgPSBcIiAtIFwiO1xuICAgIHNhZnJhTG9va3VwU3VnZ2VzdGlvbnM6IFNhZnJhW107XG4gICAgc2FmcmFTZWFyY2hUb3RhbFJlY29yZHM6IG51bWJlcjtcblxuICAgIHRyYW5zcG9ydGFkb3JhU2VhcmNoRmllbGRzOiBGb3JtRmllbGRbXTtcbiAgICB0cmFuc3BvcnRhZG9yYVNlYXJjaEdyaWRGaWVsZHM6IEZvcm1GaWVsZFtdO1xuICAgIHRyYW5zcG9ydGFkb3JhU2VhcmNoR3JpZERhdGE6IFRyYW5zcG9ydGFkb3JhW107XG4gICAgdHJhbnNwb3J0YWRvcmFMb29rdXBEaXNwbGF5RmllbGRzID0gW1wiY29kaWdvXCIsIFwicGVzc29hLm5vbWVcIiwgXCJwZXNzb2EuY3BmQ25walwiXTtcbiAgICB0cmFuc3BvcnRhZG9yYUFkdmFuY2VkRGlzcGxheUZpZWxkcyA9IFtcImlkXCIsIFwiY29kaWdvXCIsIFwicGVzc29hLm5vbWVcIiwgXCJwZXNzb2EuY3BmQ25walwiXTtcbiAgICB0cmFuc3BvcnRhZG9yYUxvb2t1cFNlcGFyYXRvciA9IFwiIC0gXCI7XG4gICAgdHJhbnNwb3J0YWRvcmFMb29rdXBTdWdnZXN0aW9uczogVHJhbnNwb3J0YWRvcmFbXTtcbiAgICB0cmFuc3BvcnRhZG9yYVNlYXJjaFRvdGFsUmVjb3JkczogbnVtYmVyO1xuXG4gICAgZGlzYWJsZUJ1dHRvblNhdmU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIGNoYXZlTm90YUZpc2NhbDogc3RyaW5nO1xuXG4gICAgdG90YWxFaXhvc0NvbnRyYXRhZG9zOiBudW1iZXIgPSAwO1xuICAgIHRvdGFsRWl4b3NDb21wb3NpY2FvOiBudW1iZXIgPSAwO1xuXG4gICAgZXJyb0NoYXZlTm90YSA9IGZhbHNlO1xuICAgIGVycm9Gb3JuZWNlZG9yZXMgPSBmYWxzZTtcblxuICAgIHB1YmxpYyBub3Rhc1Rva2VuczogSVRva2VuW10gPSBbXTtcbiAgICBwdWJsaWMgZm9ybmVjZWRvck5vdGFzVG9rZW5zOiBJVG9rZW5bXSA9IFtdO1xuICAgIHB1YmxpYyBmb3JuZWNlZG9yTm90YXMgPSBbXTtcblxuICAgIHByaXZhdGUgZm9ybUNhcnJlZ2FkbyA9IGZhbHNlO1xuXG4gICAgb3JkZW1Db21wcmFTZWxlY2lvbmFkbzogYW55ID0gbnVsbDtcblxuICAgIHB1YmxpYyBsb2FkaW5nOiBib29sZWFuO1xuICAgIHB1YmxpYyBzYXZlQW5kSW5pdEJ1dHRvbjogYW55O1xuICAgIHB1YmxpYyBjcmVhdGVkQnlFcnA6IGJvb2xlYW47XG5cbiAgICBASW5wdXQoKSBwcml2YXRlIGFnZW5kYTogQWdlbmRhO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBuZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgICBwcml2YXRlIGVycFByb2Nlc3NEYXRhOiBFcnBQcm9jZXNzRGF0YTtcbiAgICBwcml2YXRlIGVuYWJsZVJldmFsaWRhdGlvbjogYm9vbGVhbjtcblxuICAgIHByaXZhdGUgb3JkZW5zOiBhbnk7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXG4gICAgICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGZpbGlhbFNlcnZpY2U6IEZpbGlhbFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcGVzc29hU2VydmljZTogUGVzc29hU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBwcm9kdXRvU2VydmljZTogUHJvZHV0b1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZGVyaXZhY2FvU2VydmljZTogRGVyaXZhY2FvU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSB0cmFuc3BvcnRhZG9yYVNlcnZpY2U6IFRyYW5zcG9ydGFkb3JhU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBvcmRlbUNvbXByYVNlcnZpY2U6IE9yZGVtQ29tcHJhU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByZWNlYmltZW50b09yZGVtQ29tcHJhU2VydmljZTogUmVjZWJpbWVudG9PcmRlbUNvbXByYVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICAgICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICAgICAgcHJpdmF0ZSBvcmlnZW1NZXJjYWRvcmlhU2VydmljZTogUGVzc29hRW5kZXJlY29TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHNhZnJhU2VydmljZTogU2FmcmFTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIG92ZXJyaWRlOiBSZWNlYmltZW50b09yZGVtQ29tcHJhQ2hlZ2FkYVZlaWN1bG9PdmVycmlkZSxcbiAgICAgICAgcHJpdmF0ZSBub3RhVmFsaWRhdG9yU2VydmljZTogTm90YVZhbGlkYXRvclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgY29uZmlybWF0aW9uU2VydmljZTogQ29uZmlybWF0aW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGFnZW5kYVNlcnZpY2U6IEFnZW5kYVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZXJwUHJvY2Vzc1NlcnZpY2U6IEVycFByb2Nlc3NTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGVycEZvcm1Db25maWdTZXJ2aWNlOiBFcnBGb3JtQ29uZmlnU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSB2ZXJpZmljYU5vdGFGaXNjYWw6IFZlcmlmaWNhTm90YWZpc2NhbCxcbiAgICAgICAgcHJpdmF0ZSBoYXNDaGFuZ2VTZXJ2aWNlOiBIYXNDaGFuZ2VTZXJ2aWNlLFxuICAgICkge1xuICAgICAgICB0aGlzLmZvcm1Hcm91cCA9IHRoaXMuZ2V0Rm9ybUdyb3VwKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnJvdXRlLnBhcmFtcy5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoKHsgYWdlbmRhIH0pID0+IHtcbiAgICAgICAgICAgIGlmIChhZ2VuZGEgPT0gXCJuZXdcIikge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbmZpZ3VyZUZvcm0oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZ2V0UmVjZWJpbWVudG9PcmRlbUNvbXByYShhZ2VuZGEpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmZvcm1Hcm91cFxuICAgICAgICAgIC5nZXQoJ2ZpbGlhbCcpXG4gICAgICAgICAgLnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAgIC5zdWJzY3JpYmUodGhpcy5vbkNoYW5nZVJldmFsaWRhdGlvbik7XG5cbiAgICAgICAgICB0aGlzLmZvcm1Hcm91cFxuICAgICAgICAgIC5nZXQoJ2Zvcm5lY2Vkb3JlcycpXG4gICAgICAgICAgLnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAgIC5zdWJzY3JpYmUodGhpcy5vbkNoYW5nZVJldmFsaWRhdGlvbik7XG5cbiAgICAgICAgdGhpcy5mb3JtR3JvdXBcbiAgICAgICAgICAuZ2V0KCd0cmFuc3BvcnRhZG9yYScpXG4gICAgICAgICAgLnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAgIC5zdWJzY3JpYmUodGhpcy5vbkNoYW5nZVJldmFsaWRhdGlvbik7XG5cblxuICAgICAgICB0aGlzLmRlcml2YWNhb1NlYXJjaEZpZWxkcyA9IHRoaXMuZ2V0RGVyaXZhY2FvU2VhcmNoRmllbGRzKCk7XG4gICAgICAgIHRoaXMuZmlsaWFsU2VhcmNoRmllbGRzID0gdGhpcy5nZXRGaWxpYWxTZWFyY2hGaWVsZHMoKTtcbiAgICAgICAgdGhpcy5maWxpYWxTZWFyY2hHcmlkRmllbGRzID0gdGhpcy5nZXRGaWxpYWxTZWFyY2hHcmlkRmllbGRzKCk7XG4gICAgICAgIHRoaXMuZm9ybmVjZWRvclNlYXJjaEZpZWxkcyA9IHRoaXMuZ2V0Rm9ybmVjZWRvclNlYXJjaEZpZWxkcygpO1xuICAgICAgICB0aGlzLm9yaWdlbU1lcmNhZG9yaWFTZWFyY2hGaWVsZHMgPSB0aGlzLmdldE9yaWdlbU1lcmNhZG9yaWFTZWFyY2hGaWVsZHMoKTtcbiAgICAgICAgdGhpcy5wcm9kdXRvU2VhcmNoRmllbGRzID0gdGhpcy5nZXRQcm9kdXRvU2VhcmNoRmllbGRzKCk7XG4gICAgICAgIHRoaXMuc2FmcmFTZWFyY2hGaWVsZHMgPSB0aGlzLmdldFNhZnJhU2VhcmNoRmllbGRzKCk7XG4gICAgICAgIHRoaXMuc2FmcmFTZWFyY2hHcmlkRmllbGRzID0gdGhpcy5nZXRTYWZyYVNlYXJjaEdyaWRGaWVsZHMoKTtcbiAgICAgICAgdGhpcy50cmFuc3BvcnRhZG9yYVNlYXJjaEZpZWxkcyA9IHRoaXMuZ2V0VHJhbnNwb3J0YWRvcmFTZWFyY2hGaWVsZHMoKTtcbiAgICAgICAgdGhpcy50cmFuc3BvcnRhZG9yYVNlYXJjaEdyaWRGaWVsZHMgPSB0aGlzLmdldFRyYW5zcG9ydGFkb3JhU2VhcmNoR3JpZEZpZWxkcygpO1xuICAgICAgICB0aGlzLm9yZGVtQ29tcHJhU2VhcmNoRmllbGRzID0gdGhpcy5nZXRPcmRlbUNvbXByYUZpZWxkcygpO1xuICAgICAgICB0aGlzLm9yZGVtQ29tcHJhU2VhcmNoR3JpZEZpZWxkcyA9IHRoaXMuZ2V0T3JkZW1Db21wcmFHcmlkRmllbGRzKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuYWdlbmRhICYmIHRoaXMuYWdlbmRhLmV4dGVybmFsVGVuYW50KSB7XG4gICAgICAgICAgICB0aGlzLnNldFRyYW5zcG9ydGFkb3JhKHRoaXMuYWdlbmRhLmV4dGVybmFsVGVuYW50LmNucGopO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5nZXRFbXByZXNhRmlsaWFsKCk7XG5cbiAgICAgICAgdGhpcy50b3RhbEVpeG9zQ29tcG9zaWNhbyA9IHRoaXMuYWdlbmRhICYmIHRoaXMuYWdlbmRhLnZlaWN1bG8gPyB0aGlzLmFnZW5kYS52ZWljdWxvLmVpeG9zIHx8IDAgOiAwO1xuXG4gICAgICAgIGNvbnN0IHN0YXR1c0FnZW5kYSA9IFtcbiAgICAgICAgICAgIFwiQUdVQVJEQU5ET19DT05GSVJNQUNBT19TT0xJQ0lUQU5URVwiLFxuICAgICAgICAgICAgXCJBR0VOREFET1wiLFxuICAgICAgICAgICAgXCJBR1VBUkRBTkRPX0NPTkZJUk1BQ0FPXCIsXG4gICAgICAgICAgICBcIkVNX0VYRUNVQ0FPXCIsXG4gICAgICAgICAgICBcIlJFSkVJVEFET19QT1JfVkFMSURBQ0FPXCJcbiAgICAgICAgXTtcbiAgICAgICAgaWYgKHRoaXMuYWdlbmRhICYmICFzdGF0dXNBZ2VuZGEuaW5jbHVkZXModGhpcy5hZ2VuZGEuc3RhdHVzKSkge1xuICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmRpc2FibGUoKTtcbiAgICAgICAgICB0aGlzLmRpc2FibGVCdXR0b25TYXZlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNyZWF0ZWRCeUVycERpc2FibGVGb3JtKCk7XG5cbiAgICAgICAgdGhpcy5lcnBQcm9jZXNzU2VydmljZS5jdXJyZW50LnN1YnNjcmliZShtZXNzYWdlID0+IHRoaXMuZXJwUHJvY2Vzc0RhdGEgPSBtZXNzYWdlKTtcbiAgICAgICAgdGhpcy5lcnBGb3JtQ29uZmlnU2VydmljZS5jdXJyZW50LnN1YnNjcmliZShtZXNzYWdlID0+IHRoaXMuZW5hYmxlUmV2YWxpZGF0aW9uID0gbWVzc2FnZSk7XG4gICAgICAgIHRoaXMudmVyaWZpY2FTZVRlbUFsdGVyYWNhbygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdmVyaWZpY2FTZVRlbUFsdGVyYWNhbygpIHtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5mb3JtQ2FycmVnYWRvKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYXNDaGFuZ2VTZXJ2aWNlLmhhc0NoYW5nZSh0aGlzLmFnZW5kYS5pZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vdmVycmlkZS5pbml0aWFsaXplKCk7XG4gICAgICAgIHRoaXMuc2F2ZUFuZEluaXRCdXR0b24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW5pdCcpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKTtcbiAgICAgICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMub3ZlcnJpZGUucmVtb3ZlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZWRCeUVycERpc2FibGVGb3JtKCkge1xuICAgICAgICBpZiAodGhpcy5hZ2VuZGEgJiYgdGhpcy5hZ2VuZGEuY3JlYXRlZEJ5RXJwKSB7XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZWRCeUVycCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoJ2ZpbGlhbCcpLmRpc2FibGUoKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldCgncHJvZHV0bycpLmRpc2FibGUoKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldCgnZGVyaXZhY2FvJykuZGlzYWJsZSgpO1xuICAgICAgICAgICAgaWYgKCEhdGhpcy5mb3JtR3JvdXAuZ2V0KFwidHJhbnNwb3J0YWRvcmFcIikudmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoJ3RyYW5zcG9ydGFkb3JhJykuZGlzYWJsZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb25maWd1cmVGb3JtKCkge1xuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlcyh0aGlzLmZvcm1Hcm91cCwgXCJmaWxpYWxcIiwgdGhpcy5vbkZpbGlhbFZhbHVlQ2hhbmdlKTtcbiAgICAgICAgY29uc3QgZ2V0RmlsdGVyUXVlcnlQcm9kdXRvID0gKHZhbHVlOiBhbnkpID0+IGBwcm9kdXRvLmlkIGVxICcke3ZhbHVlLmlkfScgYW5kIHNpdHVhY2FvIGVxICdBVElWTydgO1xuICAgICAgICB0aGlzLmNoZWNrVmFsdWVzQ2hhbmdlcyh0aGlzLmZvcm1Hcm91cCwgXCJwcm9kdXRvXCIsIFwiZGVyaXZhY2FvXCIsIHRoaXMuZGVyaXZhY2FvU2VydmljZSwgZ2V0RmlsdGVyUXVlcnlQcm9kdXRvLFxuICAgICAgICAgICAgWydjb2RpZ28nLCAnZGVzY3JpY2FvJ10sICh2YWwpID0+IERlcml2YWNhby5mcm9tRHRvKHZhbCksICAxMCwgdHJ1ZSwgdHJ1ZVxuICAgICAgICApO1xuXG4gICAgICAgICh0aGlzLmZvcm1Hcm91cC5nZXQoXCJmb3JuZWNlZG9yZXNcIikgYXMgRm9ybUFycmF5KS52YWx1ZUNoYW5nZXNcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAgICAgLnN1YnNjcmliZShmb3JuZWNlZG9yZXMgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghIWZvcm5lY2Vkb3JlcyAmJiBmb3JuZWNlZG9yZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoXCJwcm9kdXRvXCIpLmRpc2FibGUoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KFwiZGVyaXZhY2FvXCIpLmRpc2FibGUoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoXCJwcm9kdXRvXCIpLmVuYWJsZSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoXCJkZXJpdmFjYW9cIikuZW5hYmxlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgdGhpcy5jcmVhdGVkQnlFcnBEaXNhYmxlRm9ybSgpO1xuICAgICAgICAgICAgdGhpcy5mb3JtQ2FycmVnYWRvID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEVtcHJlc2FGaWxpYWwoKSB7XG4gICAgICAgIGNvbnN0IHBsYW50YSA9IHRoaXMuYWdlbmRhLnBsYW50YSB8fCB7IGNucGo6IFtdIH07XG4gICAgICAgIGlmIChwbGFudGEuY25wai5sZW5ndGggIT09IDEpIHJldHVybjtcblxuICAgICAgICBjb25zdCBmaWx0ZXJRdWVyeSA9IGBwZXNzb2EuY3BmQ25waiBlcSAnJHtwbGFudGEuY25walswXX0nYDtcbiAgICAgICAgdGhpcy5maWxpYWxTZXJ2aWNlLmxpc3QoeyBmaWx0ZXJRdWVyeSwgcGFnZTogMCwgc2l6ZTogMTAgfSlcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoeyBjb250ZW50cyB9KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbnRlbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWxpYWwgPSBjb250ZW50c1swXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZW1wcmVzYSA9IGNvbnRlbnRzWzBdLmVtcHJlc2E7XG4gICAgICAgICAgICAgICAgICAgIGZpbGlhbC5sYWJlbCA9IGAke2ZpbGlhbC5jb2RpZ299IC0gJHtmaWxpYWwubm9tZX1gO1xuICAgICAgICAgICAgICAgICAgICBlbXByZXNhLmxhYmVsID0gYCR7ZW1wcmVzYS5jb2RpZ299IC0gJHtlbXByZXNhLm5vbWV9YDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KCdlbXByZXNhJykuc2V0VmFsdWUoZW1wcmVzYSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldCgnZmlsaWFsJykuc2V0VmFsdWUoZmlsaWFsKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KCdmaWxpYWwnKS5lbmFibGUoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KCdwcm9kdXRvJykuZW5hYmxlKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldCgnb3JkZW1Db21wcmEnKS5lbmFibGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNoZWNrVmFsdWVzQ2hhbmdlcyhmb3JtR3JvdXA6IEZvcm1Hcm91cCwgZm9ybUNvbnRyb2xVcGRhdGVkOiBzdHJpbmcsIGZvcm1Db250cm9sRGVwZW5kZW50OiBzdHJpbmcsIHNlcnZpY2U6IGFueSwgZ2V0RmlsdGVyUXVlcnk6IGFueSxcbiAgICAgICAgdmFyaWFibGVzOiBhbnksIGR0b0NvbnZlcnRlcjogKHZhbDogYW55KSA9PiBhbnksIHF1ZXJ5U2l6ZTogbnVtYmVyID0gMSwgaXNDaGFuZ2VWYWxpZGF0b3JzPzogYm9vbGVhbiwgY2xlYXJGb3JtQ29udHJvbERlcGVuZGVudD86IGJvb2xlYW4pIHtcbiAgICAgICAgZm9ybUdyb3VwLmdldChmb3JtQ29udHJvbFVwZGF0ZWQpXG4gICAgICAgICAgICAudmFsdWVDaGFuZ2VzXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSxcbiAgICAgICAgICAgICAgICBkZWJvdW5jZVRpbWUoNTAwKSxcbiAgICAgICAgICAgICAgICBmaWx0ZXIodmFsdWUgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNDaGFuZ2VWYWxpZGF0b3JzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuZ2V0KGZvcm1Db250cm9sRGVwZW5kZW50KS5zZXRWYWxpZGF0b3JzKHZhbHVlID8gVmFsaWRhdG9ycy5yZXF1aXJlZCA6IFZhbGlkYXRvcnMubnVsbFZhbGlkYXRvcik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGNsZWFyRm9ybUNvbnRyb2xEZXBlbmRlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5nZXQoZm9ybUNvbnRyb2xEZXBlbmRlbnQpLnNldFZhbHVlKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5nZXQoZm9ybUNvbnRyb2xEZXBlbmRlbnQpLnNldFZhbHVlKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmdldChmb3JtQ29udHJvbERlcGVuZGVudCkuZGlzYWJsZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIG1lcmdlTWFwKCh2YWx1ZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlclF1ZXJ5ID0gZ2V0RmlsdGVyUXVlcnkodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VydmljZS5saXN0KHsgZmlsdGVyUXVlcnksIHBhZ2U6IDAsIHNpemU6IHF1ZXJ5U2l6ZSB9KTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoeyBjb250ZW50cyB9KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFjb250ZW50cyB8fCAhY29udGVudHMubGVuZ3RoIHx8IGNvbnRlbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZvcm1Hcm91cC5nZXQoZm9ybUNvbnRyb2xEZXBlbmRlbnQpLmVuYWJsZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoY29udGVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzWzBdLmxhYmVsID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudChnZXRMb29rdXBMYWJlbChjb250ZW50c1swXSwgdmFyaWFibGVzLCAnIC0gJywgdHJ1ZSkpO1xuICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuZ2V0KGZvcm1Db250cm9sRGVwZW5kZW50KS5zZXRWYWx1ZShkdG9Db252ZXJ0ZXIoY29udGVudHNbMF0pKTtcbiAgICAgICAgICAgICAgICB9IFxuXG4gICAgICAgICAgICAgICAgaWYgKGNvbnRlbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmdldChmb3JtQ29udHJvbERlcGVuZGVudCkuZW5hYmxlKCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmdldChmb3JtQ29udHJvbERlcGVuZGVudCkuZGlzYWJsZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkJsdXJDaGF2ZU5vdGFGaXNjYWwoKSB7XG4gICAgICAgIGlmICh0aGlzLnZlcmlmaWNhTm90YUZpc2NhbC52ZXJpZmljYVNlTm90YUZpc2NhbEVzdGFEdXBsaWNhZGEodGhpcy5jaGF2ZU5vdGFGaXNjYWwsICB0aGlzLm9yZGVucywgdGhpcy5mb3JuZWNlZG9yTm90YXNUb2tlbnMpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlbW92ZU5vdGFFcnJvcigpO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuY2hhdmVOb3RhRmlzY2FsO1xuICAgICAgICBpZiAoISF2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMubWVuc2FnZW1CdXNjYW5kb05vdGEoKTtcblxuICAgICAgICAgICAgdGhpcy5ub3RhVmFsaWRhdG9yU2VydmljZS5wZXNxdWlzYXJEb2N1bWVudG9WYWxpZGFOb3RhRW1Vc28oe1xuICAgICAgICAgICAgICAgIGZpbGlhbElkOiAodGhpcy5mb3JtR3JvdXAuZ2V0KFwiZmlsaWFsXCIpLnZhbHVlICYmIHRoaXMuZm9ybUdyb3VwLmdldChcImZpbGlhbFwiKS52YWx1ZS5pZCkgfHwgbnVsbCxcbiAgICAgICAgICAgICAgICBjaGF2ZURvY3VtZW50bzogdmFsdWUudHJpbSgpIHx8IFwiXCJcbiAgICAgICAgICAgIH0pLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksXG4gICAgICAgICAgICAgICAgZmluYWxpemUoKCkgPT4gdGhpcy5sb2FkaW5nID0gZmFsc2UpXG4gICAgICAgICAgICApLnN1YnNjcmliZSgocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZE5vdmFOb3RhKHJlc3BvbnNlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB2YWx1ZUNoYW5nZXMoZm9ybUdyb3VwOiBGb3JtR3JvdXAsIHBhdGg6IHN0cmluZywgc3Vic2NyaWJlOiBhbnkpIHtcbiAgICAgICAgZm9ybUdyb3VwLmdldChwYXRoKVxuICAgICAgICAgICAgLnZhbHVlQ2hhbmdlc1xuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHZhbHVlID0+IHN1YnNjcmliZSh2YWx1ZSwgZm9ybUdyb3VwKSk7XG4gICAgfVxuXG4gICAgLyoqUFJPRFVUTyBERVBFTkRFIERFIEZJTElBTC4gT1JERU0gQ09NUFJBIERFUEVOREUgREUgRklMSUFMICovXG4gICAgcHJpdmF0ZSBvbkZpbGlhbFZhbHVlQ2hhbmdlID0gKGZpbGlhbDogRmlsaWFsLCBmb3JtR3JvdXA6IEZvcm1Hcm91cCkgPT4ge1xuICAgICAgICB0aGlzLmNoYW5nZUZvcm1Hcm91cFZhbHVlKGZpbGlhbCwgXCJwcm9kdXRvXCIsIGZvcm1Hcm91cCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkZvcm5lY2Vkb3JDaGFuZ2UgPSAoZm9ybmVjZWRvcjogUGVzc29hRW5kZXJlY28sIGZvcm1Hcm91cDogRm9ybUdyb3VwKSA9PiB7XG4gICAgICAgIHRoaXMuY2hhbmdlRm9ybUdyb3VwVmFsdWUoZm9ybmVjZWRvciwgXCJvcmlnZW1NZXJjYWRvcmlhXCIsIGZvcm1Hcm91cCk7XG4gICAgICAgIHRoaXMuY2hhbmdlRm9ybUdyb3VwVmFsdWUoZm9ybmVjZWRvciwgXCJvcmRlbnNcIiwgZm9ybUdyb3VwKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNoYW5nZUZvcm1Hcm91cFZhbHVlKGlzQW55OiBhbnksIGZvcm1Db250cm9sOiBzdHJpbmcsIGZvcm1Hcm91cDogYW55KSB7XG4gICAgICAgIGlmICghaXNBbnkpIHtcbiAgICAgICAgICAgIGZvcm1Hcm91cC5nZXQoZm9ybUNvbnRyb2wpLnNldFZhbHVlKHVuZGVmaW5lZCk7XG4gICAgICAgICAgICBmb3JtR3JvdXAuZ2V0KGZvcm1Db250cm9sKS5kaXNhYmxlKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBmb3JtR3JvdXAuZ2V0KGZvcm1Db250cm9sKS5lbmFibGUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UmVjZWJpbWVudG9PcmRlbUNvbXByYShhZ2VuZGFJZDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMucmVjZWJpbWVudG9PcmRlbUNvbXByYVNlcnZpY2UubGlzdCh7XG4gICAgICAgICAgICBmaWx0ZXJRdWVyeTogYGFnZW5kYS5pZCBlcSAnJHthZ2VuZGFJZH0nYCxcbiAgICAgICAgICAgIHNpemU6IDEsXG4gICAgICAgICAgICBwYWdlOiAwXG4gICAgICAgIH0pXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLCBmaW5hbGl6ZSgoKSA9PiB0aGlzLmxvYWRpbmcgPSBmYWxzZSkpXG4gICAgICAgIC5zdWJzY3JpYmUoKHsgY29udGVudHMgfSkgPT4ge1xuICAgICAgICAgICAgaWYgKCFjb250ZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1DYXJyZWdhZG8gPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbmZpZ3VyZUZvcm0oKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy50b3RhbEVpeG9zQ29udHJhdGFkb3MgPSBjb250ZW50c1swXS5laXhvcyB8fCAwO1xuICAgICAgICAgICAgdGhpcy50b3RhbEVpeG9zQ29tcG9zaWNhbyA9IGNvbnRlbnRzWzBdLmFnZW5kYSAmJiBjb250ZW50c1swXS5hZ2VuZGEudmVpY3VsbyBcbiAgICAgICAgICAgICAgICA/IGNvbnRlbnRzWzBdLmFnZW5kYS52ZWljdWxvLmVpeG9zIHx8IDAgOiAwO1xuXG4gICAgICAgICAgICBjb25zdCByZWNlYmltZW50b09yZGVtQ29tcHJhOiBSZWNlYmltZW50b09yZGVtQ29tcHJhRHRvID0gUmVjZWJpbWVudG9PcmRlbUNvbXByYS5mcm9tRHRvKGNvbnRlbnRzWzBdKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmVuYWJsZSgpO1xuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZShyZWNlYmltZW50b09yZGVtQ29tcHJhKTtcblxuICAgICAgICAgICAgcmVjZWJpbWVudG9PcmRlbUNvbXByYS5mb3JuZWNlZG9yZXMuZm9yRWFjaChmb3JuZWNlZG9yID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmb3JtID0gdGhpcy5nZXRGb3JuZWNlZG9yRm9ybShmb3JuZWNlZG9yKTtcbiAgICAgICAgICAgICAgICB0aGlzLmdldEZvcm5lY2Vkb3Jlc0Zvcm0oKS5wdXNoKGZvcm0pO1xuXG4gICAgICAgICAgICAgICAgZm9ybmVjZWRvci5vcmRlbnMuZm9yRWFjaChvcmRlbUNvbXByYSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9yZGVtQ29tcHJhRm9ybSA9IHRoaXMuZ2V0T3JkZW1Db21wcmFGb3JtKG9yZGVtQ29tcHJhKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRPcmRlbnNDb21wcmEoZm9ybSkucHVzaChvcmRlbUNvbXByYUZvcm0pO1xuICAgICAgICAgICAgICAgICAgICBvcmRlbUNvbXByYS5ub3Rhcy5mb3JFYWNoKG5vdGEgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgbm90YUZvcm0gPSB0aGlzLmdldE5vdGFGb3JtKG5vdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXROb3RhcyhvcmRlbUNvbXByYUZvcm0pLnB1c2gobm90YUZvcm0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5jb25maWd1cmVGb3JtKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkZpbGlhbExvb2t1cFJlcXVlc3QodmFsdWU6IHN0cmluZykge1xuICAgICAgICBjb25zdCBmaWx0ZXJJbnB1dCA9IHRoaXMuZ2V0RmlsaWFsU2VhcmNoRmllbGRzKClcbiAgICAgICAgICAgIC5maWx0ZXIoKHsgdHlwZSB9KSA9PiBpc1ZhbGlkRmlsdGVyKHR5cGUsIHZhbHVlKSlcbiAgICAgICAgICAgIC5yZWR1Y2UoKGEsIHsgbmFtZSwgdHlwZSB9KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09IEZpZWxkVHlwZS5JbnRlZ2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLmEsIFtuYW1lXTogdmFsdWUucmVwbGFjZSgvXFxELywgXCJcIikgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgLi4uYSwgW25hbWVdOiB2YWx1ZSB9O1xuICAgICAgICAgICAgfSwgeyBjbnBqczogdGhpcy5hZ2VuZGEucGxhbnRhLmNucGosIHBhZ2luYTogeyBsaW1pdDogMTAsIG9mZnNldDogMCB9IH0gYXMgUGVzcXVpc2FyRmlsaWFpc0lucHV0KTtcblxuICAgICAgICB0aGlzLmZpbGlhbFNlcnZpY2VcbiAgICAgICAgICAgIC5saXN0RmlsaWFpcyhmaWx0ZXJJbnB1dClcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgobGlzdDogYW55KSA9PlxuICAgICAgICAgICAgICAgIHRoaXMuZmlsaWFsTG9va3VwU3VnZ2VzdGlvbnMgPSBsaXN0LmZpbGlhaXMubWFwKChmaWxpYWw6IGFueSkgPT4gRmlsaWFsLmZyb21EdG8oZmlsaWFsKSlcbiAgICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uRmlsaWFsU2VhcmNoUmVxdWVzdChldmVudDogYW55KSB7XG4gICAgICAgIGNvbnN0IHsgZmlyc3QsIHJvd3MsIG11bHRpU29ydE1ldGEsIGZpbHRlckRhdGEgfSA9IGV2ZW50O1xuICAgICAgICBjb25zdCBwYWdlID0gZmlyc3QgLyByb3dzO1xuICAgICAgICBjb25zdCBzb3J0OiBTb3J0TWV0YVtdID0gbXVsdGlTb3J0TWV0YTtcbiAgICAgICAgY29uc3Qgc29ydEZvcm1hdHRlZCA9ICEhKHNvcnQgfHwgW10pLmxlbmd0aCAmJiB7IGNhbXBvOiBzb3J0WzBdLmZpZWxkLCBvcmRlbmFjYW86IHNvcnRbMF0ub3JkZXIgPiAwID8gJ0FzYycgOiAnRGVzYycgfTtcbiAgICAgICAgY29uc3QgZmlsdGVySW5wdXQgPSB0aGlzLmdldEZpbGlhbFNlYXJjaEZpZWxkcygpXG4gICAgICAgICAgICAuZmlsdGVyKCh7IG5hbWUgfSkgPT4gZmlsdGVyRGF0YVtuYW1lXSAhPSB1bmRlZmluZWQgJiYgZmlsdGVyRGF0YVtuYW1lXSAhPSBcIlwiKVxuICAgICAgICAgICAgLnJlZHVjZSgoYSwgeyBuYW1lLCB0eXBlIH0pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGZpbHRlckRhdGFbbmFtZV07XG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09IEZpZWxkVHlwZS5JbnRlZ2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLmEsIFtuYW1lXTogYCR7dmFsdWV9YC5yZXBsYWNlKC9cXEQvLCBcIlwiKSB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4geyAuLi5hLCBbbmFtZV06IHZhbHVlIH07XG4gICAgICAgICAgICB9LCB7IGNucGpzOiB0aGlzLmFnZW5kYS5wbGFudGEuY25waiwgcGFnaW5hOiB7IGxpbWl0OiByb3dzLCBvZmZzZXQ6IHBhZ2UsIGxpc3RhT3JkZW5hY2FvOiBzb3J0Rm9ybWF0dGVkID8gWyB7IC4uLihzb3J0Rm9ybWF0dGVkKSB9IF0gOiBudWxsIH0gfSBhcyBQZXNxdWlzYXJGaWxpYWlzSW5wdXQpO1xuXG4gICAgICAgIHRoaXMuZmlsaWFsU2VydmljZVxuICAgICAgICAgICAgLmxpc3RGaWxpYWlzKGZpbHRlcklucHV0KVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChsaXN0OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbGlhbFNlYXJjaEdyaWREYXRhID0gbGlzdC5maWxpYWlzLm1hcChGaWxpYWwuZnJvbUR0byk7XG4gICAgICAgICAgICAgICAgdGhpcy5maWxpYWxTZWFyY2hUb3RhbFJlY29yZHMgPSBsaXN0LnF0ZFRvdGFsUmVnaXN0cm9zO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqRklMVFJBIEZPUk5FQ0VET1IgRVEgVFJVRSAqL1xuICAgIHB1YmxpYyBvbkZvcm5lY2Vkb3JMb29rdXBSZXF1ZXN0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgb25Mb29rdXBSZXF1ZXN0KHRoaXMuZm9ybmVjZWRvclNlYXJjaEZpZWxkcywgdGhpcy5mb3JuZWNlZG9yTG9va3VwRGlzcGxheUZpZWxkcyxcbiAgICAgICAgICAgIHRoaXMuZm9ybmVjZWRvckFkdmFuY2VkRGlzcGxheUZpZWxkcywgdGhpcy5mb3JuZWNlZG9yTG9va3VwU2VwYXJhdG9yLCB0aGlzLnBlc3NvYVNlcnZpY2UsIFxuICAgICAgICAgICAgdmFsdWUsIGAgZm9ybmVjZWRvciBlcSB0cnVlIGApXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGxpc3Q6IGFueSkgPT4gdGhpcy5mb3JuZWNlZG9yTG9va3VwU3VnZ2VzdGlvbnMgPSBsaXN0LmNvbnRlbnRzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Gb3JuZWNlZG9yU2VhcmNoUmVxdWVzdChldmVudDogYW55KSB7XG4gICAgICAgIG9uU2VhcmNoUmVxdWVzdCh0aGlzLmZvcm5lY2Vkb3JTZWFyY2hGaWVsZHMsIHRoaXMuZm9ybmVjZWRvckxvb2t1cERpc3BsYXlGaWVsZHMsXG4gICAgICAgICAgICB0aGlzLmZvcm5lY2Vkb3JBZHZhbmNlZERpc3BsYXlGaWVsZHMsIHRoaXMuZm9ybmVjZWRvckxvb2t1cFNlcGFyYXRvciwgdGhpcy5wZXNzb2FTZXJ2aWNlLCBcbiAgICAgICAgICAgIGV2ZW50LCBgIGZvcm5lY2Vkb3IgZXEgdHJ1ZSBgKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChsaXN0OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm5lY2Vkb3JTZWFyY2hHcmlkRGF0YSA9IGxpc3QuY29udGVudHM7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JuZWNlZG9yU2VhcmNoVG90YWxSZWNvcmRzID0gbGlzdC50b3RhbEVsZW1lbnRzO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqRklMVFJBIE9SSUdFTSBNRVJDQURPUklBIFBFTE8gRk9STkVDRURPUiBTRUxFQ0lPTkFETyAqL1xuICAgIHB1YmxpYyBvbk9yaWdlbU1lcmNhZG9yaWFMb29rdXBSZXF1ZXN0KGZvcm5lY2Vkb3JGb3JtOiBGb3JtR3JvdXAsIHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgb25Mb29rdXBSZXF1ZXN0KHRoaXMub3JpZ2VtTWVyY2Fkb3JpYVNlYXJjaEZpZWxkcywgdGhpcy5vcmlnZW1NZXJjYWRvcmlhTG9va3VwRGlzcGxheUZpZWxkcyxcbiAgICAgICAgICAgIHRoaXMub3JpZ2VtTWVyY2Fkb3JpYUFkdmFuY2VkRGlzcGxheUZpZWxkcywgdGhpcy5vcmlnZW1NZXJjYWRvcmlhTG9va3VwU2VwYXJhdG9yLCB0aGlzLm9yaWdlbU1lcmNhZG9yaWFTZXJ2aWNlLCBcbiAgICAgICAgICAgIHZhbHVlLCBgIHBlc3NvYS5pZCBlcSAnJHtmb3JuZWNlZG9yRm9ybS5nZXQoXCJmb3JuZWNlZG9yXCIpLnZhbHVlLmlkfScgYClcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgobGlzdDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcmlnZW1NZXJjYWRvcmlhTG9va3VwU3VnZ2VzdGlvbnMgPSBsaXN0LmNvbnRlbnRzO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uT3JpZ2VtTWVyY2Fkb3JpYVNlYXJjaFJlcXVlc3QoZm9ybmVjZWRvckZvcm06IEZvcm1Hcm91cCwgZXZlbnQ6IGFueSkge1xuICAgICAgICBvblNlYXJjaFJlcXVlc3QodGhpcy5vcmlnZW1NZXJjYWRvcmlhU2VhcmNoRmllbGRzLCB0aGlzLm9yaWdlbU1lcmNhZG9yaWFMb29rdXBEaXNwbGF5RmllbGRzLFxuICAgICAgICAgICAgdGhpcy5vcmlnZW1NZXJjYWRvcmlhQWR2YW5jZWREaXNwbGF5RmllbGRzLCB0aGlzLm9yaWdlbU1lcmNhZG9yaWFMb29rdXBTZXBhcmF0b3IsIHRoaXMub3JpZ2VtTWVyY2Fkb3JpYVNlcnZpY2UsIGV2ZW50LFxuICAgICAgICAgICAgYCBwZXNzb2EuaWQgZXEgJyR7Zm9ybmVjZWRvckZvcm0uZ2V0KFwiZm9ybmVjZWRvclwiKS52YWx1ZS5pZH0nIGApXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGxpc3Q6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMub3JpZ2VtTWVyY2Fkb3JpYVNlYXJjaEdyaWREYXRhID0gbGlzdC5jb250ZW50cztcbiAgICAgICAgICAgICAgICB0aGlzLm9yaWdlbU1lcmNhZG9yaWFTZWFyY2hUb3RhbFJlY29yZHMgPSBsaXN0LnRvdGFsRWxlbWVudHM7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipGSUxUUkEgREVSSVZBQ0FPIFBFTE8gUFJPRFVUTyAqL1xuICAgIHB1YmxpYyBvbkRlcml2YWNhb0xvb2t1cFJlcXVlc3QodmFsdWU6IHN0cmluZykge1xuICAgICAgICBvbkxvb2t1cFJlcXVlc3QodGhpcy5kZXJpdmFjYW9TZWFyY2hGaWVsZHMsIHRoaXMuZGVyaXZhY2FvTG9va3VwRGlzcGxheUZpZWxkcywgdGhpcy5kZXJpdmFjYW9BZHZhbmNlZERpc3BsYXlGaWVsZHMsXG4gICAgICAgICAgICB0aGlzLmRlcml2YWNhb0xvb2t1cFNlcGFyYXRvciwgdGhpcy5kZXJpdmFjYW9TZXJ2aWNlLCB2YWx1ZSxcbiAgICAgICAgICAgIGAgcHJvZHV0by5pZCBlcSAnJHt0aGlzLmZvcm1Hcm91cC5nZXQoXCJwcm9kdXRvXCIpLnZhbHVlLmlkfScgYClcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgobGlzdDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXJpdmFjYW9Mb29rdXBTdWdnZXN0aW9ucyA9IGxpc3QuY29udGVudHM7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25EZXJpdmFjYW9TZWFyY2hSZXF1ZXN0KGV2ZW50OiBhbnkpIHtcbiAgICAgICAgb25TZWFyY2hSZXF1ZXN0KHRoaXMuZGVyaXZhY2FvU2VhcmNoRmllbGRzLCB0aGlzLmRlcml2YWNhb0xvb2t1cERpc3BsYXlGaWVsZHMsXG4gICAgICAgICAgICB0aGlzLmRlcml2YWNhb0FkdmFuY2VkRGlzcGxheUZpZWxkcywgdGhpcy5kZXJpdmFjYW9Mb29rdXBTZXBhcmF0b3IsIHRoaXMuZGVyaXZhY2FvU2VydmljZSwgZXZlbnQsXG4gICAgICAgICAgICBgIHByb2R1dG8uaWQgZXEgJyR7dGhpcy5mb3JtR3JvdXAuZ2V0KFwicHJvZHV0b1wiKS52YWx1ZS5pZH0nIGApXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGxpc3Q6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVyaXZhY2FvU2VhcmNoR3JpZERhdGEgPSBsaXN0LmNvbnRlbnRzO1xuICAgICAgICAgICAgICAgIHRoaXMuZGVyaXZhY2FvU2VhcmNoVG90YWxSZWNvcmRzID0gbGlzdC50b3RhbEVsZW1lbnRzO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uT3JkZW1Db21wcmFMb29rdXBSZXF1ZXN0KGZvcm5lY2Vkb3JGb3JtOiBGb3JtR3JvdXAsIHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgb25Mb29rdXBSZXF1ZXN0KHRoaXMub3JkZW1Db21wcmFTZWFyY2hGaWVsZHMsIHRoaXMub3JkZW1Db21wcmFMb29rdXBEaXNwbGF5RmllbGRzLCB0aGlzLm9yZGVtQ29tcHJhQWR2YW5jZWREaXNwbGF5RmllbGRzLFxuICAgICAgICAgICAgdGhpcy5vcmRlbUNvbXByYUxvb2t1cFNlcGFyYXRvciwgdGhpcy5vcmRlbUNvbXByYVNlcnZpY2UsIHZhbHVlLFxuICAgICAgICAgICAgYGZpbGlhbC5pZCBlcSAnJHt0aGlzLmZvcm1Hcm91cC5nZXQoXCJmaWxpYWxcIikudmFsdWUuaWR9JyBhbmQgcGVzc29hLmlkIGVxICcke2Zvcm5lY2Vkb3JGb3JtLmdldChcImZvcm5lY2Vkb3JcIikudmFsdWUuaWR9J2ApXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGxpc3Q6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMub3JkZW1Db21wcmFMb29rdXBTdWdnZXN0aW9ucyA9IGxpc3QuY29udGVudHM7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25PcmRlbUNvbXByYVNlYXJjaFJlcXVlc3QoZm9ybmVjZWRvckZvcm06IEZvcm1Hcm91cCwgZXZlbnQ6IGFueSkge1xuICAgICAgICBvblNlYXJjaFJlcXVlc3QodGhpcy5vcmRlbUNvbXByYVNlYXJjaEZpZWxkcywgdGhpcy5vcmRlbUNvbXByYUxvb2t1cERpc3BsYXlGaWVsZHMsXG4gICAgICAgICAgICB0aGlzLm9yZGVtQ29tcHJhQWR2YW5jZWREaXNwbGF5RmllbGRzLCB0aGlzLm9yZGVtQ29tcHJhTG9va3VwU2VwYXJhdG9yLCB0aGlzLm9yZGVtQ29tcHJhU2VydmljZSwgZXZlbnQsXG4gICAgICAgICAgICBgZmlsaWFsLmlkIGVxICcke3RoaXMuZm9ybUdyb3VwLmdldChcImZpbGlhbFwiKS52YWx1ZS5pZH0nIGFuZCBwZXNzb2EuaWQgZXEgJyR7Zm9ybmVjZWRvckZvcm0uZ2V0KFwiZm9ybmVjZWRvclwiKS52YWx1ZS5pZH0nYClcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgobGlzdDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcmRlbUNvbXByYVNlYXJjaEdyaWREYXRhID0gbGlzdC5jb250ZW50cztcbiAgICAgICAgICAgICAgICB0aGlzLm9yZGVtQ29tcHJhU2VhcmNoVG90YWxSZWNvcmRzID0gbGlzdC50b3RhbEVsZW1lbnRzO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZE9yZGVtQ29tcHJhKGZvcm5lY2Vkb3JGb3JtOiBGb3JtR3JvdXApIHtcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlXG4gICAgICAgICAgICAub3BlbihPcmRlbUNvbXByYUZvcm1Db21wb25lbnQsIHtcbiAgICAgICAgICAgICAgICAuLi5kaWFsb2dDb25maWcsXG4gICAgICAgICAgICAgICAgaGVhZGVyOiAnQWRpY2lvbmFyIE9yZGVtIGRlIENvbXByYScsXG4gICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICBhZ2VuZGE6IHRoaXMuYWdlbmRhLFxuICAgICAgICAgICAgICAgICAgICBmaWxpYWw6IHRoaXMuZm9ybUdyb3VwLmdldChcImZpbGlhbFwiKS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgZm9ybmVjZWRvcjogZm9ybmVjZWRvckZvcm0uZ2V0KFwiZm9ybmVjZWRvclwiKS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgb3JkZW5zOiBmb3JuZWNlZG9yRm9ybS5nZXQoXCJvcmRlbnNcIikudmFsdWUsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5vbkNsb3NlXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSwgZmlsdGVyKHZhbHVlID0+ICEhdmFsdWUpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgob3JkZW1Db21wcmE6IGFueSkgPT4gdGhpcy5vbk9yZGVtQ29tcHJhU2F2ZWQob3JkZW1Db21wcmEsIGZvcm5lY2Vkb3JGb3JtKSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUHJvZHV0b0xvb2t1cFJlcXVlc3QodmFsdWU6IHN0cmluZykge1xuICAgICAgICBjb25zdCBmaWxpYWwgPSB0aGlzLmZvcm1Hcm91cC5nZXQoXCJmaWxpYWxcIikudmFsdWU7XG4gICAgICAgIGNvbnN0IHRpcG9BZ2VuZGFtZW50byA9IHRoaXMuYWdlbmRhLnRpcG9BZ2VuZGFtZW50bztcblxuICAgICAgICB0aGlzLnByb2R1dG9TZXJ2aWNlLmxpc3RQcm9kdXRvcyh7XG4gICAgICAgICAgICBwZXNxdWlzYTogdmFsdWUsXG4gICAgICAgICAgICBlbXByZXNhSWQ6ICEhZmlsaWFsID8gZmlsaWFsLmVtcHJlc2EuaWQgOiBudWxsLFxuICAgICAgICAgICAgZmlsaWFsSWQ6ICEhZmlsaWFsID8gZmlsaWFsLmlkIDogbnVsbCxcbiAgICAgICAgICAgIHRpcG9BZ2VuZGFtZW50b0lkOiAhIXRpcG9BZ2VuZGFtZW50byA/IHRpcG9BZ2VuZGFtZW50by5pZCA6IG51bGwsXG4gICAgICAgICAgICBzaXR1YWNhbzogJ0FUSVZPJyxcbiAgICAgICAgICAgIHBhZ2luYToge1xuICAgICAgICAgICAgICAgIGxpbWl0OiAxMDAsXG4gICAgICAgICAgICAgICAgb2Zmc2V0OiAwXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4gdGhpcy5wcm9kdXRvTG9va3VwU3VnZ2VzdGlvbnMgPSByZXMucHJvZHV0b3MubWFwKFByb2R1dG8uZnJvbUR0bykpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblByb2R1dG9TZWFyY2hSZXF1ZXN0KGV2ZW50OiBhbnkpIHtcbiAgICAgICAgY29uc3QgeyBmaXJzdCwgcm93cywgbXVsdGlTb3J0TWV0YSwgZmlsdGVyRGF0YSB9ID0gZXZlbnQ7XG4gICAgICAgIGNvbnN0IHBhZ2UgPSBmaXJzdCAvIHJvd3M7XG4gICAgICAgIGNvbnN0IHNvcnQ6IFNvcnRNZXRhW10gPSBtdWx0aVNvcnRNZXRhO1xuICAgICAgICBjb25zdCBzb3J0Rm9ybWF0dGVkID0gISEoc29ydCB8fCBbXSkubGVuZ3RoICYmIHsgY2FtcG86IHNvcnRbMF0uZmllbGQsIG9yZGVuYWNhbzogc29ydFswXS5vcmRlciA+IDAgPyAnQXNjJyA6ICdEZXNjJyB9O1xuICAgICAgICBjb25zdCBmaWx0ZXJJbnB1dCA9IHRoaXMuZ2V0UHJvZHV0b1NlYXJjaEZpZWxkcygpXG4gICAgICAgICAgICAuZmlsdGVyKCh7IG5hbWUgfSkgPT4gZmlsdGVyRGF0YVtuYW1lXSAhPSB1bmRlZmluZWQgJiYgZmlsdGVyRGF0YVtuYW1lXSAhPSBcIlwiKVxuICAgICAgICAgICAgLnJlZHVjZSgoYSwgeyBuYW1lLCB0eXBlIH0pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGZpbHRlckRhdGFbbmFtZV07XG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09IEZpZWxkVHlwZS5JbnRlZ2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLmEsIFtuYW1lXTogYCR7dmFsdWV9YC5yZXBsYWNlKC9cXEQvLCBcIlwiKSB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4geyAuLi5hLCBbbmFtZV06IHZhbHVlIH07XG4gICAgICAgICAgICB9LCB7IHBhZ2luYTogeyBsaW1pdDogcm93cywgb2Zmc2V0OiBwYWdlLCBsaXN0YU9yZGVuYWNhbzogc29ydEZvcm1hdHRlZCA/IFsgeyAuLi4oc29ydEZvcm1hdHRlZCkgfSBdIDogbnVsbCB9IH0gYXMgUHJvZHV0b1BhcmFtcyk7XG5cbiAgICAgICAgY29uc3QgZmlsaWFsID0gdGhpcy5mb3JtR3JvdXAuZ2V0KFwiZmlsaWFsXCIpLnZhbHVlO1xuICAgICAgICBjb25zdCB0aXBvQWdlbmRhbWVudG8gPSB0aGlzLmFnZW5kYS50aXBvQWdlbmRhbWVudG87XG5cbiAgICAgICAgdGhpcy5wcm9kdXRvU2VydmljZS5saXN0UHJvZHV0b3Moe1xuICAgICAgICAgICAgLi4uZmlsdGVySW5wdXQsXG4gICAgICAgICAgICBlbXByZXNhSWQ6ICEhZmlsaWFsID8gZmlsaWFsLmVtcHJlc2EuaWQgOiBudWxsLFxuICAgICAgICAgICAgZmlsaWFsSWQ6ICEhZmlsaWFsID8gZmlsaWFsLmlkIDogbnVsbCxcbiAgICAgICAgICAgIHNpdHVhY2FvOiAnQVRJVk8nLFxuICAgICAgICAgICAgdGlwb0FnZW5kYW1lbnRvSWQ6ICEhdGlwb0FnZW5kYW1lbnRvID8gdGlwb0FnZW5kYW1lbnRvLmlkIDogbnVsbFxuICAgICAgICB9KVxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMucHJvZHV0b1NlYXJjaFRvdGFsUmVjb3JkcyA9IHJlcy5xdGRUb3RhbFJlZ2lzdHJvcztcbiAgICAgICAgICAgIHRoaXMucHJvZHV0b1NlYXJjaEdyaWREYXRhID0gcmVzLnByb2R1dG9zLm1hcChQcm9kdXRvLmZyb21EdG8pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25TYWZyYUxvb2t1cFJlcXVlc3QodmFsdWU6IHN0cmluZykge1xuICAgICAgICBvbkxvb2t1cFJlcXVlc3QodGhpcy5zYWZyYVNlYXJjaEZpZWxkcywgdGhpcy5zYWZyYUxvb2t1cERpc3BsYXlGaWVsZHMsXG4gICAgICAgICAgICB0aGlzLnNhZnJhQWR2YW5jZWREaXNwbGF5RmllbGRzLCB0aGlzLnNhZnJhTG9va3VwU2VwYXJhdG9yLCB0aGlzLnNhZnJhU2VydmljZSwgdmFsdWUpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGxpc3Q6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2FmcmFMb29rdXBTdWdnZXN0aW9ucyA9IGxpc3QuY29udGVudHM7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25TYWZyYVNlYXJjaFJlcXVlc3QoZXZlbnQ6IGFueSkge1xuICAgICAgICBvblNlYXJjaFJlcXVlc3QodGhpcy5zYWZyYVNlYXJjaEZpZWxkcywgdGhpcy5zYWZyYUxvb2t1cERpc3BsYXlGaWVsZHMsXG4gICAgICAgICAgICB0aGlzLnNhZnJhQWR2YW5jZWREaXNwbGF5RmllbGRzLCB0aGlzLnNhZnJhTG9va3VwU2VwYXJhdG9yLCB0aGlzLnNhZnJhU2VydmljZSwgZXZlbnQpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGxpc3Q6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2FmcmFTZWFyY2hHcmlkRGF0YSA9IGxpc3QuY29udGVudHM7XG4gICAgICAgICAgICAgICAgdGhpcy5zYWZyYVNlYXJjaFRvdGFsUmVjb3JkcyA9IGxpc3QudG90YWxFbGVtZW50cztcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblRyYW5zcG9ydGFkb3JhTG9va3VwUmVxdWVzdCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIG9uTG9va3VwUmVxdWVzdCh0aGlzLnRyYW5zcG9ydGFkb3JhU2VhcmNoRmllbGRzLCB0aGlzLnRyYW5zcG9ydGFkb3JhTG9va3VwRGlzcGxheUZpZWxkcywgXG4gICAgICAgICAgICB0aGlzLnRyYW5zcG9ydGFkb3JhQWR2YW5jZWREaXNwbGF5RmllbGRzLCB0aGlzLnRyYW5zcG9ydGFkb3JhTG9va3VwU2VwYXJhdG9yLCB0aGlzLnRyYW5zcG9ydGFkb3JhU2VydmljZSwgdmFsdWUpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGxpc3Q6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNwb3J0YWRvcmFMb29rdXBTdWdnZXN0aW9ucyA9IGxpc3QuY29udGVudHM7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25UcmFuc3BvcnRhZG9yYVNlYXJjaFJlcXVlc3QoZXZlbnQ6IGFueSkge1xuICAgICAgICBvblNlYXJjaFJlcXVlc3QodGhpcy50cmFuc3BvcnRhZG9yYVNlYXJjaEZpZWxkcywgdGhpcy50cmFuc3BvcnRhZG9yYUxvb2t1cERpc3BsYXlGaWVsZHMsIFxuICAgICAgICAgICAgdGhpcy50cmFuc3BvcnRhZG9yYUFkdmFuY2VkRGlzcGxheUZpZWxkcywgdGhpcy50cmFuc3BvcnRhZG9yYUxvb2t1cFNlcGFyYXRvciwgdGhpcy50cmFuc3BvcnRhZG9yYVNlcnZpY2UsIGV2ZW50KVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChsaXN0OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zcG9ydGFkb3JhU2VhcmNoR3JpZERhdGEgPSBsaXN0LmNvbnRlbnRzO1xuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNwb3J0YWRvcmFTZWFyY2hUb3RhbFJlY29yZHMgPSBsaXN0LnRvdGFsRWxlbWVudHM7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0VHJhbnNwb3J0YWRvcmEodmFsdWU6IHN0cmluZykge1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IGNucGogPSB2YWx1ZS5yZXBsYWNlKC9cXC4vZywgJycpLnJlcGxhY2UoL1xcLy9nLCAnJykucmVwbGFjZSgvXFwtL2csICcnKTtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlclF1ZXJ5ID0gYHBlc3NvYS5jcGZDbnBqIGVxICcke2NucGp9J2A7XG4gICAgICAgICAgICB0aGlzLnRyYW5zcG9ydGFkb3JhU2VydmljZVxuICAgICAgICAgICAgICAgIC5saXN0KHsgZmlsdGVyUXVlcnksIHBhZ2U6IDAsIHNpemU6IDEwIH0pXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoeyBjb250ZW50cyB9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb250ZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzWzBdLmxhYmVsID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudChnZXRMb29rdXBMYWJlbChjb250ZW50c1swXSwgWydjb2RpZ28nLCAncGVzc29hLm5vbWUnXSwgJyAtICcsIHRydWUpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldCgndHJhbnNwb3J0YWRvcmEnKS5zZXRWYWx1ZShjb250ZW50c1swXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvblNhdmUoc3RhcnQ/OiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldCgnYWdlbmRhJykuc2V0VmFsdWUodGhpcy5hZ2VuZGEpO1xuICAgICAgICBcbiAgICAgICAgaWYgKHRoaXMuZm9ybUdyb3VwLmludmFsaWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlQWxsRm9ybUZpZWxkcyh0aGlzLmZvcm1Hcm91cCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoKHRoaXMuZm9ybUdyb3VwLmdldChcImZvcm5lY2Vkb3Jlc1wiKSBhcyBGb3JtQXJyYXkpLmxlbmd0aCA8PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmVycm9Gb3JuZWNlZG9yZXMgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcblxuICAgICAgICBpZiAodGhpcy5pc05ldygpICB8fCAhdGhpcy5lbmFibGVSZXZhbGlkYXRpb24pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNhdmVBbmRJbml0KHN0YXJ0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZXJwUHJvY2Vzc0RhdGEgPSB0aGlzLmVycFByb2Nlc3NTZXJ2aWNlLmJ1aWxkZXJFcnBQcm9jZXNzRGF0YVZhbGlkYU5vdGFOYU9yZGVtQ29tcHJhKHRoaXMuZXJwUHJvY2Vzc0RhdGEsIHRoaXMuZm9ybUdyb3VwKTtcbiAgICAgICAgdGhpcy5lcnBQcm9jZXNzU2VydmljZS5jaGFuZ2VEYXRhRXJwKHRoaXMuZXJwUHJvY2Vzc0RhdGEpO1xuICAgICAgICByZXR1cm4gdGhpcy5hZ2VuZGFTZXJ2aWNlXG4gICAgICAgIC5jaGVjYXJSZXZhbGlkYWNhbyh0aGlzLmVycFByb2Nlc3NEYXRhKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLFxuICAgICAgICAgICAgZmluYWxpemUoKCkgPT4gdGhpcy5sb2FkaW5nID0gZmFsc2UpLFxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5yZXF1ZXJSZXZhbGlkYWNhbykge1xuICAgICAgICAgICAgICAgIHRoaXMuYXR1YWxpemFBZ2VuZGFQYXJhUmVqZWl0YWRvUG9yVmFsaWRhY2FvKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNhdmVBbmRJbml0KHN0YXJ0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhdHVhbGl6YUFnZW5kYVBhcmFSZWplaXRhZG9Qb3JWYWxpZGFjYW8oKSB7XG4gICAgICAgIHRoaXMuY29uZmlybWF0aW9uU2VydmljZS5jb25maXJtKHtcbiAgICAgICAgICAgIGhlYWRlcjogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5wYXRpby5hZ2VuZGFfcmV2YWxpZGFjYW9fdGl0bGVcIiksXG4gICAgICAgICAgICBtZXNzYWdlOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLnBhdGlvLmFnZW5kYV9yZXZhbGlkYWNhb19tZXNzYWdlXCIpLFxuICAgICAgICAgICAgYWNjZXB0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYXNDaGFuZ2VTZXJ2aWNlLmhhc0NoYW5nZVNhdmUodGhpcy5hZ2VuZGEuaWQpO1xuICAgICAgICAgICAgICAgIHRoaXMuYWdlbmRhLnN0YXR1cyA9IFN0YXR1c0FnZW5kYS5SRUpFSVRBRE9fUE9SX1ZBTElEQUNBTztcbiAgICAgICAgICAgICAgICB0aGlzLmFnZW5kYS5tb3RvcmlzdGEgPSB7aWQ6IHRoaXMuZXJwUHJvY2Vzc0RhdGEubW90b3Jpc3RhSWR9O1xuICAgICAgICAgICAgICAgIHRoaXMuYWdlbmRhLnZlaWN1bG8gPSB7aWQ6IHRoaXMuZXJwUHJvY2Vzc0RhdGEudmVpY3Vsb0lkfTtcbiAgICAgICAgICAgICAgICB0aGlzLmFnZW5kYVNlcnZpY2VcbiAgICAgICAgICAgICAgICAgICAgLmF0dWFsaXphckFnZW5kYSh0aGlzLmFnZW5kYSlcbiAgICAgICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmNhdE1hcCgoXykgPT4gdGhpcy5nZXRTYXZlT2JzZXJ2YWJsZSgpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsaXplKCgpID0+IHRoaXMubG9hZGluZyA9IGZhbHNlKSxcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChfKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Y2Nlc3NNZXNzYWdlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXCIvY2hlZ2FkYS12ZWljdWxvXCJdLCB7IHJlbGF0aXZlVG86IHRoaXMucm91dGUgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlamVjdDogKCkgPT4gdGhpcy5sb2FkaW5nID0gZmFsc2UsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2F2ZUFuZEluaXQoc3RhcnQ6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5nZXRTYXZlT2JzZXJ2YWJsZSgpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSxcbiAgICAgICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB0aGlzLmxvYWRpbmcgPSBmYWxzZSksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCh2YWx1ZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KFwiaWRcIikuc2V0VmFsdWUodmFsdWUuaWQgfHwgbnVsbCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zdWNjZXNzTWVzc2FnZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuaGFzQ2hhbmdlU2VydmljZS5oYXNDaGFuZ2VTYXZlKHRoaXMuYWdlbmRhLmlkKTtcbiAgICAgICAgICAgICAgICBpZiAoc3RhcnQgJiYgdGhpcy5zYXZlQW5kSW5pdEJ1dHRvbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNhdmVBbmRJbml0QnV0dG9uLmNsaWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdWNjZXNzTWVzc2FnZSgpIHtcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoe1xuICAgICAgICAgICAgc2V2ZXJpdHk6IFwic3VjY2Vzc1wiLFxuICAgICAgICAgICAgc3VtbWFyeTogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInNhdmVkX21lc3NhZ2VfdGl0bGVcIiksXG4gICAgICAgICAgICBkZXRhaWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJzYXZlZF9tZXNzYWdlX2NvbnRlbnRcIiksXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc05ldygpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLmZvcm1Hcm91cC52YWx1ZS5pZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkRm9ybmVjZWRvcihkYXRhPzogYW55KSB7XG4gICAgICAgIHRoaXMuZXJyb0Zvcm5lY2Vkb3JlcyA9IGZhbHNlO1xuICAgICAgICBjb25zdCBmb3JuZWNlZG9yID0gdGhpcy5nZXRGb3JuZWNlZG9yRm9ybShkYXRhKTtcbiAgICAgICAgdGhpcy5nZXRGb3JuZWNlZG9yZXNGb3JtKCkucHVzaChmb3JuZWNlZG9yKTtcbiAgICAgICAgcmV0dXJuIGZvcm5lY2Vkb3I7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZUZvcm5lY2Vkb3IoY29udHJvbDogRm9ybUdyb3VwKSB7XG4gICAgICAgIHRoaXMuY29uZmlybWF0aW9uU2VydmljZS5jb25maXJtKHtcbiAgICAgICAgICAgIGhlYWRlcjogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucmVtb3ZlX2Zvcm5lY2Vkb3JfaGVhZGVyXCIpLFxuICAgICAgICAgICAgbWVzc2FnZTogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucmVtb3ZlX2Zvcm5lY2Vkb3JfbWVzc2FnZVwiKSxcbiAgICAgICAgICAgIGFjY2VwdDogKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5nZXRGb3JuZWNlZG9yZXNGb3JtKCkuY29udHJvbHMuaW5kZXhPZihjb250cm9sKTtcbiAgICAgICAgICAgICAgICB0aGlzLmdldEZvcm5lY2Vkb3Jlc0Zvcm0oKS5yZW1vdmVBdChpbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRGb3JuZWNlZG9yRm9ybShkYXRhOiBhbnkgPSB7fSkge1xuICAgICAgICBjb25zdCBmb3JtR3JvdXAgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgICAgICAgIGZvcm5lY2Vkb3I6IFtkYXRhLmZvcm5lY2Vkb3IsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgICAgICAgb3JpZ2VtTWVyY2Fkb3JpYTogW2RhdGEub3JpZ2VtTWVyY2Fkb3JpYV0sXG4gICAgICAgICAgICBvcmRlbnM6IHRoaXMuZm9ybUJ1aWxkZXIuYXJyYXkoW10pLFxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlcyhmb3JtR3JvdXAsIFwiZm9ybmVjZWRvclwiLCB0aGlzLm9uRm9ybmVjZWRvckNoYW5nZSk7XG5cbiAgICAgICAgY29uc3QgZ2V0RmlsdGVyUXVlcnlGb3JuZWNlZG9yID0gKHZhbHVlOiBhbnkpID0+IGBwZXNzb2EuaWQgZXEgJyR7dmFsdWUuaWR9J2A7XG4gICAgICAgIHRoaXMuY2hlY2tWYWx1ZXNDaGFuZ2VzKFxuICAgICAgICAgICAgZm9ybUdyb3VwLCBcImZvcm5lY2Vkb3JcIiwgXCJvcmlnZW1NZXJjYWRvcmlhXCIsIHRoaXMub3JpZ2VtTWVyY2Fkb3JpYVNlcnZpY2UsXG4gICAgICAgICAgICBnZXRGaWx0ZXJRdWVyeUZvcm5lY2Vkb3IsIFsnY29kaWdvJywgJ2VuZGVyZWNvJ10sICh2YWwpID0+IFBlc3NvYUVuZGVyZWNvLmZyb21EdG8odmFsKSwgMTAsIGZhbHNlLCB0cnVlXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIGZvcm1Hcm91cDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Rm9ybmVjZWRvcmVzRm9ybSgpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLmZvcm1Hcm91cC5nZXQoXCJmb3JuZWNlZG9yZXNcIikgYXMgRm9ybUFycmF5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Tm90YXMoZm9ybUdyb3VwOiBGb3JtR3JvdXApIHtcbiAgICAgICAgcmV0dXJuIChmb3JtR3JvdXAuZ2V0KFwibm90YXNcIikgYXMgRm9ybUFycmF5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkTm90YShmb3JtR3JvdXA6IEZvcm1Hcm91cCkge1xuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbihOb3RhRm9ybUNvbXBvbmVudCwge1xuICAgICAgICAgICAgaGVhZGVyOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5hZGljaW9uYXJfbm90YVwiKSxcbiAgICAgICAgICAgIC4uLmRpYWxvZ0NvbmZpZyxcbiAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICBmb3JuZWNlZG9yOiBmb3JtR3JvdXAuZ2V0KFwiZm9ybmVjZWRvclwiKS52YWx1ZSxcbiAgICAgICAgICAgICAgICBwcm9kdXRvOiB0aGlzLmZvcm1Hcm91cC5nZXQoXCJwcm9kdXRvXCIpLnZhbHVlLFxuICAgICAgICAgICAgICAgIGZpbGlhbDogdGhpcy5mb3JtR3JvdXAuZ2V0KFwiZmlsaWFsXCIpLnZhbHVlLFxuICAgICAgICAgICAgICAgIGZvcm5lY2Vkb3JOb3Rhc1Rva2VuczogdGhpcy5mb3JuZWNlZG9yTm90YXNUb2tlbnMsXG4gICAgICAgICAgICAgICAgb3JkZW5zOiB0aGlzLm9yZGVucyxcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLm9uQ2xvc2VcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksIGZpbHRlcih2YWx1ZSA9PiAhIXZhbHVlKSlcbiAgICAgICAgLnN1YnNjcmliZSh2YWx1ZSA9PiB0aGlzLm9uTm90YVNhdmVkKHZhbHVlLCBmb3JtR3JvdXApKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3Zlck5vdGEoZm9ybmVjZWRvckZvcm06IEZvcm1Hcm91cCwgb3JkZW1Db21wcmFGb3JtOiBGb3JtR3JvdXAsIG5vdGFGb3JtOiBGb3JtR3JvdXApIHtcbiAgICAgICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlLmNvbmZpcm0oe1xuICAgICAgICAgICAgaGVhZGVyOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5yZW1vdmVfbm90YV9oZWFkZXJcIiksXG4gICAgICAgICAgICBtZXNzYWdlOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5yZW1vdmVfbm90YV9tZXNzYWdlXCIpLFxuICAgICAgICAgICAgYWNjZXB0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3JkZW1Db21wcmFJZCA9IG9yZGVtQ29tcHJhRm9ybVtcInZhbHVlXCJdW1wib3JkZW1Db21wcmFcIl1bXCJpZFwiXTtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuZ2V0Tm90YXNGcm9tT3JkZW5zKGZvcm5lY2Vkb3JGb3JtLCBvcmRlbUNvbXByYUlkKS5jb250cm9scy5pbmRleE9mKG5vdGFGb3JtKTtcbiAgICAgICAgICAgICAgICB0aGlzLmdldE5vdGFzRnJvbU9yZGVucyhmb3JuZWNlZG9yRm9ybSwgb3JkZW1Db21wcmFJZCkucmVtb3ZlQXQoaW5kZXgpO1xuXG4gICAgICAgICAgICAgICAgY29uc3Qgbm90YSA9IG5vdGFGb3JtW1widmFsdWVcIl07XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JuZWNlZG9yTm90YXNUb2tlbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGlkOiBub3RhLmNoYXZlTm90YUZpc2NhbCxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IG5vdGEubnVtZXJvTm90YUZpc2NhbFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybmVjZWRvck5vdGFzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBjaGF2ZU5vdGFGaXNjYWw6IG5vdGEuY2hhdmVOb3RhRmlzY2FsLFxuICAgICAgICAgICAgICAgICAgICBzZXJpZU5vdGFGaXNjYWw6IG5vdGEuc2VyaWVOb3RhRmlzY2FsLFxuICAgICAgICAgICAgICAgICAgICBzZXJpZUxlZ2FsTm90YUZpc2NhbDogbm90YS5zZXJpZUxlZ2FsTm90YUZpc2NhbCxcbiAgICAgICAgICAgICAgICAgICAgbnVtZXJvTm90YUZpc2NhbDogbm90YS5udW1lcm9Ob3RhRmlzY2FsLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2hvd0J1dHRvbnMoKSB7XG4gICAgICAgIGlmICghdGhpcy5hZ2VuZGEpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBTdGF0dXNBZ2VuZGEuQUdFTkRBRE8sXG4gICAgICAgICAgICBTdGF0dXNBZ2VuZGEuQUdVQVJEQU5ET19DT05GSVJNQUNBTyxcbiAgICAgICAgICAgIFN0YXR1c0FnZW5kYS5BR1VBUkRBTkRPX0NPTkZJUk1BQ0FPX1NPTElDSVRBTlRFLFxuICAgICAgICAgICAgU3RhdHVzQWdlbmRhLlJFSkVJVEFET19QT1JfVkFMSURBQ0FPXG4gICAgICAgIF0uaW5jbHVkZXModGhpcy5hZ2VuZGEuc3RhdHVzIGFzIFN0YXR1c0FnZW5kYSk7XG4gICAgfVxuXG4gICAgcHVibGljIGRpc2FibGVBZGljaW9uYXJOb3RhKCkge1xuICAgICAgICBpZiAodGhpcy5vcmRlbUNvbXByYVNlbGVjaW9uYWRvID09PSBudWxsIHx8IHRoaXMub3JkZW1Db21wcmFTZWxlY2lvbmFkbyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZXJPcmRlbUNvbXByYShmb3JuZWNlZG9yRm9ybTogRm9ybUdyb3VwLCBvcmRlbUNvbXByYUZvcm06IEZvcm1Hcm91cCkge1xuICAgICAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybSh7XG4gICAgICAgICAgICBoZWFkZXI6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnJlbW92ZV9vcmRlbV9jb21wcmFfaGVhZGVyXCIpLFxuICAgICAgICAgICAgbWVzc2FnZTogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucmVtb3ZlX29yZGVtX2NvbXByYV9tZXNzYWdlXCIpLFxuICAgICAgICAgICAgYWNjZXB0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3JkZW5zQ29tcHJhRm9ybSA9IHRoaXMuZ2V0T3JkZW5zQ29tcHJhKGZvcm5lY2Vkb3JGb3JtKTtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IG9yZGVuc0NvbXByYUZvcm0uY29udHJvbHMuaW5kZXhPZihvcmRlbUNvbXByYUZvcm0pO1xuICAgICAgICAgICAgICAgIG9yZGVuc0NvbXByYUZvcm0ucmVtb3ZlQXQoaW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uT3JkZW1Db21wcmFTYXZlZChvcmRlbUNvbXByYTogYW55LCBmb3JuZWNlZG9yRm9ybTogRm9ybUdyb3VwKSB7XG4gICAgICAgIGNvbnN0IG9yZGVtQ29tcHJhRm9ybSA9IHRoaXMuZ2V0T3JkZW1Db21wcmFGb3JtKHsgb3JkZW1Db21wcmEgOiBvcmRlbUNvbXByYSB9KTtcbiAgICAgICAgdGhpcy5nZXRPcmRlbnNDb21wcmEoZm9ybmVjZWRvckZvcm0pLnB1c2gob3JkZW1Db21wcmFGb3JtKTtcbiAgICAgICAgdGhpcy5nZXRGb3JuZWNlZG9yQnlPcmRlbUNvbXByYShvcmRlbUNvbXByYSwgZm9ybmVjZWRvckZvcm0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Rm9ybmVjZWRvckJ5T3JkZW1Db21wcmEob3JkZW1Db21wcmE6IE9yZGVtQ29tcHJhRHRvLCBmb3JuZWNlZG9yRm9ybTogRm9ybUdyb3VwKSB7XG4gICAgICAgIHRoaXMucGVzc29hU2VydmljZS5saXN0KHsgc2l6ZTogMSwgcGFnZTogMCwgZmlsdGVyUXVlcnk6IGBpZCBlcSAnJHtvcmRlbUNvbXByYS5wZXNzb2EuaWR9J2AgfSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLFxuICAgICAgICAgICAgICAgIG1hcCgoeyBjb250ZW50cyB9KSA9PiAoY29udGVudHMgfHwgW10pLmxlbmd0aCAmJiBjb250ZW50c1swXSksXG4gICAgICAgICAgICAgICAgZmlsdGVyKHZhbHVlID0+ICEhdmFsdWUpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHBlc3NvYSA9PiB7XG4gICAgICAgICAgICAgICAgZm9ybmVjZWRvckZvcm0uZ2V0KFwiZm9ybmVjZWRvclwiKS5zZXRWYWx1ZShQZXNzb2EuZnJvbUR0byhwZXNzb2EpKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldE9yZGVuc0NvbXByYShmb3JuZWNlZG9yRm9ybTogRm9ybUdyb3VwKSB7XG4gICAgICAgIHRoaXMub3JkZW5zID0gZm9ybmVjZWRvckZvcm0uZ2V0KFwib3JkZW5zXCIpO1xuICAgICAgICByZXR1cm4gZm9ybmVjZWRvckZvcm0uZ2V0KFwib3JkZW5zXCIpIGFzIEZvcm1BcnJheTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Tm90YXNGcm9tT3JkZW5zKGZvcm5lY2Vkb3JGb3JtOiBBYnN0cmFjdENvbnRyb2wsIG9yZGVtQ29tcHJhSWQ6IGFueSkge1xuICAgICAgICBsZXQgb3JkZW5zRm9ybVNlbGVjaW9uYWRvID0gbnVsbDtcbiAgICAgICAgY29uc3Qgb3JkZW5zQ29tcHJhRm9ybSA9IGZvcm5lY2Vkb3JGb3JtW1wiY29udHJvbHNcIl1bXCJvcmRlbnNcIl1bXCJjb250cm9sc1wiXTtcblxuICAgICAgICBmb3IgKGxldCBvcmRlbUNvbXByYUZvcm0gb2Ygb3JkZW5zQ29tcHJhRm9ybSkge1xuICAgICAgICAgICAgaWYgKG9yZGVtQ29tcHJhRm9ybVtcImNvbnRyb2xzXCJdW1wib3JkZW1Db21wcmFcIl1bXCJ2YWx1ZVwiXS5pZCA9PT0gb3JkZW1Db21wcmFJZCkge1xuICAgICAgICAgICAgICAgIG9yZGVuc0Zvcm1TZWxlY2lvbmFkbyA9IG9yZGVtQ29tcHJhRm9ybVtcImNvbnRyb2xzXCJdW1wibm90YXNcIl07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb3JkZW5zRm9ybVNlbGVjaW9uYWRvIGFzIEZvcm1BcnJheTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkRm9ybmVjZWRvck5vdGFzVG9rZW5FbU9yZGVtQ29tcHJhKGZvcm5lY2Vkb3JGb3JtOiBGb3JtR3JvdXAsIHRva2VuOiBJVG9rZW4pIHtcbiAgICAgICAgaWYgKHRoaXMub3JkZW1Db21wcmFTZWxlY2lvbmFkbyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5tZW5zYWdlbU9yZGVtQ29tcHJhTmFvU2VsZWNpb25hZG8oKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5vdGFzID0gdGhpcy5mb3JuZWNlZG9yTm90YXMuZmlsdGVyKGZvcm5lY2Vkb3JOb3RhID0+IGZvcm5lY2Vkb3JOb3RhLmNoYXZlTm90YUZpc2NhbCA9PT0gdG9rZW4uaWQpO1xuICAgICAgICBjb25zdCBub3Rhc0Zvcm0gPSB0aGlzLmdldE5vdGFzRnJvbU9yZGVucyhmb3JuZWNlZG9yRm9ybSwgdGhpcy5vcmRlbUNvbXByYVNlbGVjaW9uYWRvLmlkKTtcbiAgICAgICAgaWYgKG5vdGFzRm9ybSAhPT0gbnVsbCAmJiBub3Rhc1swXSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgbm90YXNGb3JtLnB1c2godGhpcy5nZXROb3RhRm9ybShub3Rhc1swXSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yZW1vdmVGb3JuZWNlZG9yTm90YXNUb2tlbkRhT3JkZW1Db21wcmEodG9rZW4pO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmVGb3JuZWNlZG9yTm90YXNUb2tlbkRhT3JkZW1Db21wcmEodG9rZW46IElUb2tlbikge1xuICAgICAgICB0aGlzLmZvcm5lY2Vkb3JOb3Rhc1Rva2Vucy5zcGxpY2UodGhpcy5mb3JuZWNlZG9yTm90YXNUb2tlbnMuaW5kZXhPZih0b2tlbiksIDEpO1xuICAgICAgICB0aGlzLmZvcm5lY2Vkb3JOb3RhcyA9IHRoaXMuZm9ybmVjZWRvck5vdGFzLmZpbHRlcihmb3JuZWNlZG9yTm90YSA9PiBmb3JuZWNlZG9yTm90YS5jaGF2ZU5vdGFGaXNjYWwgIT09IHRva2VuLmlkKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE9yZGVtQ29tcHJhRm9ybShkYXRhOiBhbnkgPSB7fSkge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICAgICAgICBvcmRlbUNvbXByYTogW2RhdGEub3JkZW1Db21wcmEsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgICAgICAgbm90YXM6IHRoaXMuZm9ybUJ1aWxkZXIuYXJyYXkoW10pLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE5vdGFGb3JtKGRhdGE6IGFueSA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgICAgICAgIGNoYXZlTm90YUZpc2NhbDogW2RhdGEuY2hhdmVOb3RhRmlzY2FsXSxcbiAgICAgICAgICAgIHNlcmllTm90YUZpc2NhbDogW2RhdGEuc2VyaWVOb3RhRmlzY2FsXSxcbiAgICAgICAgICAgIHNlcmllTGVnYWxOb3RhRmlzY2FsOiBbZGF0YS5zZXJpZUxlZ2FsTm90YUZpc2NhbF0sXG4gICAgICAgICAgICBudW1lcm9Ob3RhRmlzY2FsOiBbZGF0YS5udW1lcm9Ob3RhRmlzY2FsXSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtZW5zYWdlbU9yZGVtQ29tcHJhTmFvU2VsZWNpb25hZG8oKSB7XG4gICAgICAgIHRoaXMuYWRkTWVzc2FnZShcImVycm9yXCIsIFwiT3JkZW0gZGUgY29tcHJhIG7Do28gc2VsZWNpb25hZG9cIiwgXCJOZW5odW0gb3JkZW0gZGUgY29tcHJhIGZvaSBzZWxlY2lvbmFkbyFcIik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbk5vdGFTYXZlZCh2YWx1ZTogYW55LCBmb3JuZWNlZG9yRm9ybTogRm9ybUdyb3VwKSB7XG4gICAgICAgIGlmICh0aGlzLm9yZGVtQ29tcHJhU2VsZWNpb25hZG8gPT09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMubWVuc2FnZW1PcmRlbUNvbXByYU5hb1NlbGVjaW9uYWRvKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXZhbHVlLmFkZEZvcm5lY2Vkb3IpIHtcbiAgICAgICAgICAgIGNvbnN0IG5vdGFzRm9ybSA9IHRoaXMuZ2V0Tm90YXNGcm9tT3JkZW5zKGZvcm5lY2Vkb3JGb3JtLCB0aGlzLm9yZGVtQ29tcHJhU2VsZWNpb25hZG8uaWQpO1xuICAgICAgICAgICAgaWYgKG5vdGFzRm9ybSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIG5vdGFzRm9ybS5wdXNoKHRoaXMuZ2V0Tm90YUZvcm0odmFsdWUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGV4aXN0c0Zvcm5lY2Vkb3IgPSAodGhpcy5mb3JtR3JvdXAuZ2V0KFwiZm9ybmVjZWRvcmVzXCIpIGFzIEZvcm1BcnJheSkuY29udHJvbHMuZmluZCgoZm9ybSkgPT4gKGZvcm0udmFsdWUuZm9ybmVjZWRvciB8fCB7aWQ6IHVuZGVmaW5lZH0pLmlkID09PSB2YWx1ZS5mb3JuZWNlZG9yLmlkKTtcbiAgICAgICAgY29uc3QgeyBpbmZvTm90YSB9ID0gdmFsdWU7XG4gICAgICAgIGNvbnN0IG5vdGFGb3JtID0gdGhpcy5nZXROb3RhRm9ybSh7IFxuICAgICAgICAgICAgY2hhdmVOb3RhRmlzY2FsOiBpbmZvTm90YS5jaGF2ZSxcbiAgICAgICAgICAgIHNlcmllTm90YUZpc2NhbDogaW5mb05vdGEuc2VyaWUsXG4gICAgICAgICAgICBzZXJpZUxlZ2FsTm90YUZpc2NhbDogaW5mb05vdGEuc2VyaWVMZWdhbCxcbiAgICAgICAgICAgIG51bWVyb05vdGFGaXNjYWw6IGluZm9Ob3RhLm51bWVybyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKCEhZXhpc3RzRm9ybmVjZWRvcikge1xuICAgICAgICAgICAgY29uc3Qgbm90YXNGb3JtID0gdGhpcy5nZXROb3Rhc0Zyb21PcmRlbnMoZXhpc3RzRm9ybmVjZWRvciwgdGhpcy5vcmRlbUNvbXByYVNlbGVjaW9uYWRvLmlkKTtcbiAgICAgICAgICAgIG5vdGFzRm9ybS5wdXNoKG5vdGFGb3JtKTtcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZUZpZWxkcyhleGlzdHNGb3JuZWNlZG9yLCBcImZvcm5lY2Vkb3JcIiwgXCJvcmlnZW1NZXJjYWRvcmlhXCIpO1xuICAgICAgICB9IGVsc2UgaWYgKCFmb3JuZWNlZG9yRm9ybS5nZXQoXCJmb3JuZWNlZG9yXCIpLnZhbHVlKSB7XG4gICAgICAgICAgICBmb3JuZWNlZG9yRm9ybS5nZXQoXCJmb3JuZWNlZG9yXCIpLnNldFZhbHVlKFBlc3NvYS5mcm9tRHRvKHZhbHVlLmZvcm5lY2Vkb3IpKTtcbiAgICAgICAgICAgIGZvcm5lY2Vkb3JGb3JtLmdldChcIm9yaWdlbU1lcmNhZG9yaWFcIikuc2V0VmFsdWUoUGVzc29hRW5kZXJlY28uZnJvbUR0byh2YWx1ZS5vcmlnZW1NZXJjYWRvcmlhKSk7XG4gICAgICAgICAgICBjb25zdCBub3Rhc0Zvcm0gPSB0aGlzLmdldE5vdGFzRnJvbU9yZGVucyhmb3JuZWNlZG9yRm9ybSwgdGhpcy5vcmRlbUNvbXByYVNlbGVjaW9uYWRvLmlkKTtcbiAgICAgICAgICAgIG5vdGFzRm9ybS5wdXNoKG5vdGFGb3JtKTtcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZUZpZWxkcyhmb3JuZWNlZG9yRm9ybSwgXCJmb3JuZWNlZG9yXCIsIFwib3JpZ2VtTWVyY2Fkb3JpYVwiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm5lY2Vkb3IgPSB0aGlzLmFkZEZvcm5lY2Vkb3IoeyBmb3JuZWNlZG9yOiBQZXNzb2EuZnJvbUR0byh2YWx1ZS5mb3JuZWNlZG9yKSwgb3JpZ2VtTWVyY2Fkb3JpYTogUGVzc29hRW5kZXJlY28uZnJvbUR0byh2YWx1ZS5vcmlnZW1NZXJjYWRvcmlhKSB9KTtcbiAgICAgICAgICAgIGNvbnN0IG5vdGFzRm9ybSA9IHRoaXMuZ2V0Tm90YXNGcm9tT3JkZW5zKGZvcm5lY2Vkb3IsIHRoaXMub3JkZW1Db21wcmFTZWxlY2lvbmFkby5pZCk7XG4gICAgICAgICAgICBub3Rhc0Zvcm0ucHVzaChub3RhRm9ybSk7XG4gICAgICAgICAgICB0aGlzLmRpc2FibGVGaWVsZHMoZm9ybmVjZWRvciwgXCJmb3JuZWNlZG9yXCIsIFwib3JpZ2VtTWVyY2Fkb3JpYVwiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYWRkTWVzc2FnZShzZXZlcml0eTogc3RyaW5nLCBzdW1tYXJ5OiBzdHJpbmcsIGRldGFpbDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHtcbiAgICAgICAgICAgIHNldmVyaXR5LFxuICAgICAgICAgICAgc3VtbWFyeTogdGhpcy50cmFuc2xhdGUuaW5zdGFudChzdW1tYXJ5KSxcbiAgICAgICAgICAgIGRldGFpbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChkZXRhaWwpLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFNhdmVPYnNlcnZhYmxlKCkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZm9ybUdyb3VwLmdldFJhd1ZhbHVlKCk7XG4gICAgICAgIHZhbHVlLmVtcHJlc2EgPSB2YWx1ZS5maWxpYWwuZW1wcmVzYTtcbiAgICAgICAgY29uc3QgcmVjZWJpbWVudG9EdG8gPSBSZWNlYmltZW50b09yZGVtQ29tcHJhLnRvRHRvKHZhbHVlKTtcblxuICAgICAgICBsZXQgZm9ybmVjZWRvcmVzOiBhbnlbXSA9IHJlY2ViaW1lbnRvRHRvLmZvcm5lY2Vkb3JlcztcbiAgICAgICAgcmVjZWJpbWVudG9EdG8uZm9ybmVjZWRvcmVzLmZvckVhY2goYW50ZXJpb3IgPT4ge1xuICAgICAgICAgICAgcmVjZWJpbWVudG9EdG8uZm9ybmVjZWRvcmVzLmZvckVhY2gocG9zdGVyaW9yID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoYW50ZXJpb3IuZm9ybmVjZWRvci5pZCA9PT0gcG9zdGVyaW9yLmZvcm5lY2Vkb3IuaWQgJiZcbiAgICAgICAgICAgICAgICAgICAgYW50ZXJpb3Iub3JpZ2VtTWVyY2Fkb3JpYS5pZCA9PT0gcG9zdGVyaW9yLm9yaWdlbU1lcmNhZG9yaWEuaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybmVjZWRvcmVzID0gZm9ybmVjZWRvcmVzLnNwbGljZShmb3JuZWNlZG9yZXMuaW5kZXhPZihwb3N0ZXJpb3IpLCAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJlY2ViaW1lbnRvRHRvLmZvcm5lY2Vkb3JlcyA9IGZvcm5lY2Vkb3JlcztcblxuXG4gICAgICAgIGlmICh0aGlzLmlzTmV3KCkgJiYgIXZhbHVlLmlkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZWNlYmltZW50b09yZGVtQ29tcHJhU2VydmljZS5pbnNlcnQocmVjZWJpbWVudG9EdG8pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVjZWJpbWVudG9PcmRlbUNvbXByYVNlcnZpY2UudXBkYXRlKHRoaXMuZm9ybUdyb3VwLnZhbHVlLmlkLCByZWNlYmltZW50b0R0byk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEZvcm1Hcm91cCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgICAgICAgaWQ6IFt1bmRlZmluZWRdLFxuICAgICAgICAgICAgZmlsaWFsOiBbeyB2YWx1ZTogdW5kZWZpbmVkLCBkaXNhYmxlZDogZmFsc2UgfSwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICAgICAgICBmb3JuZWNlZG9yZXM6IHRoaXMuZm9ybUJ1aWxkZXIuYXJyYXkoW10pLFxuICAgICAgICAgICAgcHJvZHV0bzogW3sgdmFsdWU6IHVuZGVmaW5lZCwgZGlzYWJsZWQ6IHRydWUgfV0sXG4gICAgICAgICAgICBkZXJpdmFjYW86IFt7IHZhbHVlOiB1bmRlZmluZWQsIGRpc2FibGVkOiB0cnVlIH1dLFxuICAgICAgICAgICAgdHJhbnNwb3J0YWRvcmE6IFt1bmRlZmluZWRdLFxuICAgICAgICAgICAgc2FmcmE6IFt1bmRlZmluZWRdLFxuICAgICAgICAgICAgYWdlbmRhOiBbeyB2YWx1ZTogdW5kZWZpbmVkLCBkaXNhYmxlZDogdHJ1ZSB9LCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB2YWxpZGF0ZUFsbEZvcm1GaWVsZHMoZm9ybUdyb3VwOiBGb3JtR3JvdXApIHtcbiAgICAgICAgT2JqZWN0LmtleXMoZm9ybUdyb3VwLmNvbnRyb2xzKS5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSBmb3JtR3JvdXAuZ2V0KGZpZWxkKTtcbiAgICAgICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUNvbnRyb2wpIHtcbiAgICAgICAgICAgICBjb250cm9sLm1hcmtBc0RpcnR5KHsgb25seVNlbGY6IHRydWUgfSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtR3JvdXApeyBcbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlQWxsRm9ybUZpZWxkcyhjb250cm9sKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1BcnJheSkge1xuICAgICAgICAgICAgICAgIGNvbnRyb2wuY29udHJvbHMuZm9yRWFjaCgoZm9ybTogRm9ybUdyb3VwKSA9PiB0aGlzLnZhbGlkYXRlQWxsRm9ybUZpZWxkcyhmb3JtKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRkTm92YU5vdGEocmVzcG9uc2U6IFBlc3F1aXNhckRvY3VtZW50b1Jlc3BvbnNlKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IChyZXNwb25zZS5kb2N1bWVudG9zIHx8IFtdKS5sZW5ndGggPyByZXNwb25zZS5kb2N1bWVudG9zWzBdIDogdW5kZWZpbmVkO1xuICAgICAgICBpZiAoIXZhbHVlcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZm9ybmVjZWRvciA9IFBlc3NvYS5mcm9tRHRvKHZhbHVlcy5mb3JuZWNlZG9yKTtcbiAgICAgICAgY29uc3Qgb3JpZ2VtTWVyY2Fkb3JpYSA9IFBlc3NvYUVuZGVyZWNvLmZyb21EdG8odmFsdWVzLm9yaWdlbU1lcmNhZG9yaWEpO1xuXG4gICAgICAgIGNvbnN0IGZvcm5lY2Vkb3JGb3JtID0gdGhpcy5nZXRGb3JuZWNlZG9yZXNGb3JtKCkuY29udHJvbHMuZmluZCgoeyB2YWx1ZSB9KSA9PiB2YWx1ZS5mb3JuZWNlZG9yLmlkID09PSBmb3JuZWNlZG9yLmlkKSBhcyBGb3JtR3JvdXA7XG4gICAgICAgIGlmICghZm9ybmVjZWRvckZvcm0pIHtcbiAgICAgICAgICAgIHRoaXMuYWRkRm9ybmVjZWRvcih7IGZvcm5lY2Vkb3IsIG9yaWdlbU1lcmNhZG9yaWEgfSk7XG4gICAgICAgICAgICB0aGlzLmFkZEZvcm5lY2Vkb3JOb3Rhc1Rva2VuKHZhbHVlcyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmFkZEZvcm5lY2Vkb3JOb3Rhc1Rva2VuKHZhbHVlcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRGb3JuZWNlZG9yTm90YXNUb2tlbih2YWx1ZTogYW55KSB7XG4gICAgICAgIHRoaXMuZm9ybmVjZWRvck5vdGFzVG9rZW5zLnB1c2goe1xuICAgICAgICAgICAgaWQ6IHRoaXMuY2hhdmVOb3RhRmlzY2FsLFxuICAgICAgICAgICAgbGFiZWw6IHZhbHVlLm51bWVyb1xuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIHRoaXMuZm9ybmVjZWRvck5vdGFzLnB1c2goe1xuICAgICAgICAgICAgY2hhdmVOb3RhRmlzY2FsOiB0aGlzLmNoYXZlTm90YUZpc2NhbCxcbiAgICAgICAgICAgIHNlcmllTm90YUZpc2NhbDogdmFsdWUuc2VyaWUsXG4gICAgICAgICAgICBzZXJpZUxlZ2FsTm90YUZpc2NhbDogdmFsdWUuc2VyaWVMZWdhbCxcbiAgICAgICAgICAgIG51bWVyb05vdGFGaXNjYWw6IHZhbHVlLm51bWVybyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5jaGF2ZU5vdGFGaXNjYWwgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVtb3ZlTm90YUVycm9yKCkge1xuICAgICAgICB0aGlzLmVycm9DaGF2ZU5vdGEgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZE5vdGFFcnJvcigpIHtcbiAgICAgICAgdGhpcy5lcnJvQ2hhdmVOb3RhID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG1lbnNhZ2VtQnVzY2FuZG9Ob3RhKCkge1xuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7XG4gICAgICAgICAgICBzZXZlcml0eTogJ2luZm8nLFxuICAgICAgICAgICAgc3VtbWFyeTogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAubm90YV9zZWFyY2hfc3VtbWFyeVwiKSxcbiAgICAgICAgICAgIGRldGFpbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAubm90YV9zZWFyY2hfZGV0YWlsXCIpLFxuICAgICAgICAgICAgbGlmZTogNTAwMFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRpc2FibGVGaWVsZHMoZm9ybUdyb3VwOiBBYnN0cmFjdENvbnRyb2wsIC4uLmtleXM6IHN0cmluZ1tdKSB7XG4gICAgICAgIGtleXMuZm9yRWFjaChrZXkgPT4gZm9ybUdyb3VwLmdldChrZXkpLmRpc2FibGUoKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXREZXJpdmFjYW9TZWFyY2hGaWVsZHMoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImRlc2NyaWNhb1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLmRlcml2YWNhb19kZXNjcmljYW9cIilcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJjb2RpZ29cIixcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5kZXJpdmFjYW9fY29kaWdvXCIpXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEZpbGlhbFNlYXJjaEZpZWxkcygpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwibm9tZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLmZpbGlhbF9ub21lXCIpXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiY29kaWdvXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLkludGVnZXIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLmZpbGlhbF9jb2RpZ29cIilcbiAgICAgICAgICAgIH0pXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRGaWxpYWxTZWFyY2hHcmlkRmllbGRzKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJub21lXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAuZmlsaWFsX25vbWVcIilcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJjb2RpZ29cIixcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuSW50ZWdlcixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAuZmlsaWFsX2NvZGlnb1wiKVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImVtcHJlc2Eubm9tZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLmVtcHJlc2FcIilcbiAgICAgICAgICAgIH0pXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRGb3JuZWNlZG9yU2VhcmNoRmllbGRzKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJub21lXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucGVzc29hX25vbWVcIilcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJjb2RpZ29cIixcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuSW50ZWdlcixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucGVzc29hX2NvZGlnb1wiKVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImNwZkNucGpcIixcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5wZXNzb2FfY3BmQ25walwiKVxuICAgICAgICAgICAgfSksXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRPcmlnZW1NZXJjYWRvcmlhU2VhcmNoRmllbGRzKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJjb2RpZ29cIixcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuSW50ZWdlcixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucGVzc29hX2VuZGVyZWNvX2NvZGlnb1wiKVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcIm51bWVyb1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnBlc3NvYV9lbmRlcmVjb19udW1lcm9cIilcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJlbmRlcmVjb1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnBlc3NvYV9lbmRlcmVjb19lbmRlcmVjb1wiKVxuICAgICAgICAgICAgfSksXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRQcm9kdXRvU2VhcmNoRmllbGRzKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJkZXNjcmljYW9cIixcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5wcm9kdXRvX2Rlc2NyaWNhb1wiKVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImNvZGlnb1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnByb2R1dG9fY29kaWdvXCIpXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFNhZnJhU2VhcmNoRmllbGRzKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJjb2RpZ29cIixcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5zYWZyYV9jb2RpZ29cIilcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJkZXNjcmljYW9cIixcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5zYWZyYV9kZXNjcmljYW9cIilcbiAgICAgICAgICAgIH0pXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRTYWZyYVNlYXJjaEdyaWRGaWVsZHMoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImNvZGlnb1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnNhZnJhX2NvZGlnb1wiKVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImRlc2NyaWNhb1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnNhZnJhX2Rlc2NyaWNhb1wiKVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImVtcHJlc2Eubm9tZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnNhZnJhX2VtcHJlc2FcIilcbiAgICAgICAgICAgIH0pXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRUcmFuc3BvcnRhZG9yYVNlYXJjaEZpZWxkcygpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiY29kaWdvXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLkludGVnZXIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnRyYW5zcG9ydGFkb3JhX2NvZGlnb1wiKVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcInBlc3NvYS5ub21lXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAudHJhbnNwb3J0YWRvcmFfZGVzY3JpY2FvXCIpXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwicGVzc29hLmNwZkNucGpcIixcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC50cmFuc3BvcnRhZG9yYV9jbnBqXCIpXG4gICAgICAgICAgICB9KVxuICAgICAgICBdO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0VHJhbnNwb3J0YWRvcmFTZWFyY2hHcmlkRmllbGRzKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJjb2RpZ29cIixcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuSW50ZWdlcixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAudHJhbnNwb3J0YWRvcmFfY29kaWdvXCIpXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwicGVzc29hLm5vbWVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuSW50ZWdlcixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucGVzc29hX25vbWVcIilcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJwZXNzb2EuY3BmQ25walwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnRyYW5zcG9ydGFkb3JhX2NucGpcIilcbiAgICAgICAgICAgIH0pXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRPcmRlbUNvbXByYUZpZWxkcygpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiY29kaWdvXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAub3JkZW1fY29tcHJhX2NvZGlnb1wiKVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImVtcHJlc2Eubm9tZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLmVtcHJlc2FcIilcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJmaWxpYWwubm9tZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLmZpbGlhbFwiKVxuICAgICAgICAgICAgfSksXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRPcmRlbUNvbXByYUdyaWRGaWVsZHMoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImNvZGlnb1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5JbnRlZ2VyLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5vcmRlbV9jb21wcmFfY29kaWdvXCIpXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiZW1wcmVzYS5ub21lXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAuZW1wcmVzYVwiKVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImZpbGlhbC5ub21lXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAuZmlsaWFsXCIpXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwicGVzc29hLm5vbWVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5wZXNzb2Ffbm9tZVwiKVxuICAgICAgICAgICAgfSksXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkNoYW5nZVJldmFsaWRhdGlvbiA9IChfKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmVycFByb2Nlc3NEYXRhICYmIHRoaXMuZm9ybUdyb3VwKSB7XG4gICAgICAgICAgICB0aGlzLmVycFByb2Nlc3NEYXRhID0gdGhpcy5lcnBQcm9jZXNzU2VydmljZS5idWlsZGVyRXJwUHJvY2Vzc0RhdGEodGhpcy5lcnBQcm9jZXNzRGF0YSwgdGhpcy5mb3JtR3JvdXApO1xuICAgICAgICAgICAgdGhpcy5lcnBQcm9jZXNzU2VydmljZS5jaGFuZ2VEYXRhKHRoaXMuZXJwUHJvY2Vzc0RhdGEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbn1cbiJdfQ==
1219
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjZWJpbWVudG8tb3JkZW0tY29tcHJhLWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHNlbmlvcnNpc3RlbWFzL3ltcy1pbnRlZ3JhdGlvbi8iLCJzb3VyY2VzIjpbInNyYy9lcnAtc2VuaW9yL3JlY2ViaW1lbnRvLW9yZGVtLWNvbXByYS9mb3JtL3JlY2ViaW1lbnRvLW9yZGVtLWNvbXByYS1mb3JtLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFDeEYsT0FBTyxFQUFpQixTQUFTLEVBQUUsS0FBSyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUNuRixPQUFPLEVBQW1CLFNBQVMsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3RyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFVLE1BQU0sb0NBQW9DLENBQUM7QUFDbEYsT0FBTyxLQUFLLE9BQU8sTUFBTSxRQUFRLENBQUM7QUFDbEMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQVksTUFBTSxhQUFhLENBQUM7QUFDM0YsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckcsT0FBTyxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDL0YsT0FBTyxFQUFFLFlB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bUM7UUFQL0MsU0FBUyxDQUFDO1lBQ1AsUUFBUSxFQUFFLCtCQUErQjtZQUN6QywrZ2VBQTZEO1lBRTdELFNBQVMsRUFBRSxDQUFDLG1CQUFtQixDQUFDOztTQUNuQyxDQUFDO2lEQXdHMkIsV0FBVztZQUNiLGdCQUFnQjtZQUNaLGFBQWE7WUFDYixhQUFhO1lBQ1osY0FBYztZQUNaLGdCQUFnQjtZQUNYLHFCQUFxQjtZQUN4QixrQkFBa0I7WUFDUCw2QkFBNkI7WUFDNUMsY0FBYztZQUN2QixjQUFjO1lBQ2IsTUFBTTtZQUNXLHFCQUFxQjtZQUNoQyxZQUFZO1lBQ2hCLDRDQUE0QztZQUNoQyxvQkFBb0I7WUFDckIsbUJBQW1CO1lBQ3pCLGFBQWE7WUFDYixhQUFhO1lBQ1QsaUJBQWlCO1lBQ2Qsb0JBQW9CO1lBQ3RCLGtCQUFrQjtZQUNwQixnQkFBZ0I7T0E1SHJDLG1DQUFtQyxDQWt5Qy9DO0lBQUQsMENBQUM7Q0FBQSxBQWx5Q0QsSUFreUNDO1NBbHlDWSxtQ0FBbUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBWZXJpZmljYU5vdGFmaXNjYWwgfSBmcm9tICcuLi8uLi9jb3JlL3ZlcmlmaWNhLW5vdGEtZmlzY2FsL3ZlcmlmaWNhTm90YUZpc2NhbCc7XG5pbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1BcnJheSwgRm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSBcIkBuZ3gtdHJhbnNsYXRlL2NvcmVcIjtcbmltcG9ydCB7IEZpZWxkVHlwZSwgRm9ybUZpZWxkLCBJVG9rZW4gfSBmcm9tIFwiQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50c1wiO1xuaW1wb3J0ICogYXMgX21vbWVudCBmcm9tIFwibW9tZW50XCI7XG5pbXBvcnQgeyBDb25maXJtYXRpb25TZXJ2aWNlLCBEaWFsb2dTZXJ2aWNlLCBNZXNzYWdlU2VydmljZSwgU29ydE1ldGEgfSBmcm9tIFwicHJpbWVuZy9hcGlcIjtcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgY29uY2F0TWFwLCBkZWJvdW5jZVRpbWUsIGZpbHRlciwgZmluYWxpemUsIG1hcCwgbWVyZ2VNYXAsIHRha2VVbnRpbCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xuaW1wb3J0IHsgZ2V0TG9va3VwTGFiZWwsIG9uTG9va3VwUmVxdWVzdCwgb25TZWFyY2hSZXF1ZXN0IH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL2xvb2t1cC11dGlsc1wiO1xuaW1wb3J0IHsgZGlhbG9nQ29uZmlnLCBpc1ZhbGlkRmlsdGVyIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL3V0aWxzXCI7XG5pbXBvcnQgeyBOb3RhRm9ybUNvbXBvbmVudCB9IGZyb20gXCIuLi8uLi9jb21wb25lbnRzL25vdGEtZm9ybS9ub3RhLWZvcm0uY29tcG9uZW50XCI7XG5pbXBvcnQgeyBBZ2VuZGEgfSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy9hZ2VuZGEvYWdlbmRhXCI7XG5pbXBvcnQgeyBBZ2VuZGFTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvYWdlbmRhL2FnZW5kYS5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBEZXJpdmFjYW8gfSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy9kZXJpdmFjYW8vZGVyaXZhY2FvXCI7XG5pbXBvcnQgeyBEZXJpdmFjYW9TZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvZGVyaXZhY2FvL2Rlcml2YWNhby5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBGaWxpYWwgfSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy9maWxpYWwvZmlsaWFsXCI7XG5pbXBvcnQgeyBGaWxpYWxTZXJ2aWNlLCBQZXNxdWlzYXJGaWxpYWlzSW5wdXQgfSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy9maWxpYWwvZmlsaWFsLnNlcnZpY2VcIjtcbmltcG9ydCB7IE9yZGVtQ29tcHJhIH0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvb3JkZW0tY29tcHJhL29yZGVtLWNvbXByYVwiO1xuaW1wb3J0IHsgT3JkZW1Db21wcmFTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvb3JkZW0tY29tcHJhL29yZGVtLWNvbXByYS5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBQZXNzb2FFbmRlcmVjbyB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL3Blc3NvYS1lbmRlcmVjby9wZXNzb2EtZW5kZXJlY29cIjtcbmltcG9ydCB7IFBlc3NvYUVuZGVyZWNvU2VydmljZSB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL3Blc3NvYS1lbmRlcmVjby9wZXNzb2EtZW5kZXJlY28uc2VydmljZVwiO1xuaW1wb3J0IHsgUGVzc29hIH0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvcGVzc29hL3Blc3NvYVwiO1xuaW1wb3J0IHsgUGVzc29hU2VydmljZSB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL3Blc3NvYS9wZXNzb2Euc2VydmljZVwiO1xuaW1wb3J0IHsgUHJvZHV0byB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL3Byb2R1dG8vcHJvZHV0b1wiO1xuaW1wb3J0IHsgUHJvZHV0b1BhcmFtcywgUHJvZHV0b1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy9wcm9kdXRvL3Byb2R1dG8uc2VydmljZVwiO1xuaW1wb3J0IHsgUmVjZWJpbWVudG9PcmRlbUNvbXByYSB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL3JlY2ViaW1lbnRvLW9yZGVtLWNvbXByYS9yZWNlYmltZW50by1vcmRlbS1jb21wcmFcIjtcbmltcG9ydCB7IFJlY2ViaW1lbnRvT3JkZW1Db21wcmFEdG8gfSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy9yZWNlYmltZW50by1vcmRlbS1jb21wcmEvcmVjZWJpbWVudG8tb3JkZW0tY29tcHJhLWR0b1wiO1xuaW1wb3J0IHsgUmVjZWJpbWVudG9PcmRlbUNvbXByYVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy9yZWNlYmltZW50by1vcmRlbS1jb21wcmEvcmVjZWJpbWVudG8tb3JkZW0tY29tcHJhLnNlcnZpY2VcIjtcbmltcG9ydCB7IFNhZnJhIH0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvc2FmcmEvc2FmcmFcIjtcbmltcG9ydCB7IFNhZnJhU2VydmljZSB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL3NhZnJhL3NhZnJhLnNlcnZpY2VcIjtcbmltcG9ydCB7IFRyYW5zcG9ydGFkb3JhIH0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvdHJhbnNwb3J0YWRvcmEvdHJhbnNwb3J0YWRvcmFcIjtcbmltcG9ydCB7IFRyYW5zcG9ydGFkb3JhU2VydmljZSB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL3RyYW5zcG9ydGFkb3JhL3RyYW5zcG9ydGFkb3JhLnNlcnZpY2VcIjtcbmltcG9ydCB7IE5vdGFWYWxpZGF0b3JTZXJ2aWNlLCBQZXNxdWlzYXJEb2N1bWVudG9SZXNwb25zZSB9IGZyb20gXCIuLi8uLi9jb3JlL25vdGEtdmFsaWRhdG9yLnNlcnZpY2VcIjtcbmltcG9ydCB7IFJlY2ViaW1lbnRvT3JkZW1Db21wcmFDaGVnYWRhVmVpY3Vsb092ZXJyaWRlIH0gZnJvbSBcIi4uL3JlY2ViaW1lbnRvLW9yZGVtLWNvbXByYS1jaGVnYWRhLXZlaWN1bG8ub3ZlcnJpZGVcIjtcbmltcG9ydCB7IFN0YXR1c0FnZW5kYSB9IGZyb20gXCIuLy4uLy4uL2NvcmUvZW51bXMvc3RhdHVzLWFnZW5kYVwiO1xuaW1wb3J0IHsgT3JkZW1Db21wcmFGb3JtQ29tcG9uZW50IH0gZnJvbSAnLi8uLi9vcmRlbS1jb21wcmEtZm9ybS9vcmRlbS1jb21wcmEtZm9ybS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRXJwUHJvY2Vzc0RhdGEgfSBmcm9tIFwiLi4vLi4vY29yZS9lcnAtcHJvY2Vzcy1kYXRhL2VycC1wcm9jZXNzLWRhdGFcIjtcbmltcG9ydCB7IEVycFByb2Nlc3NTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2NvcmUvZXJwLXByb2Nlc3MtZGF0YS9lcnAtcHJvY2Vzcy1zZXJ2aWNlXCI7XG5pbXBvcnQgeyBFcnBGb3JtQ29uZmlnU2VydmljZSB9IGZyb20gXCIuLi8uLi9jb3JlL2VycC1mb3JtLWNvbmZpZy9lcnAtZm9ybS1jb25maWctc2VydmljZVwiO1xuaW1wb3J0IHsgT3JkZW1Db21wcmFEdG8gfSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy9vcmRlbS1jb21wcmEvb3JkZW0tY29tcHJhLWR0b1wiO1xuaW1wb3J0IHsgSGFzQ2hhbmdlU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvaGFzLWNoYW5nZS9oYXMtY2hhbmdlLXNlcnZpY2UnO1xuXG5jb25zdCBtb21lbnQgPSBfbW9tZW50O1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3JlY2ViaW1lbnRvLW9yZGVtLWNvbXByYS1mb3JtJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vcmVjZWJpbWVudG8tb3JkZW0tY29tcHJhLWZvcm0uY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuLi8uLi9lcnAtc2VuaW9yLnNjc3MnXSxcbiAgICBwcm92aWRlcnM6IFtDb25maXJtYXRpb25TZXJ2aWNlXVxufSlcblxuZXhwb3J0IGNsYXNzIFJlY2ViaW1lbnRvT3JkZW1Db21wcmFGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQge1xuICAgIGZvcm1Hcm91cDogRm9ybUdyb3VwO1xuXG4gICAgZGVyaXZhY2FvU2VhcmNoRmllbGRzOiBGb3JtRmllbGRbXTtcbiAgICBkZXJpdmFjYW9TZWFyY2hHcmlkRGF0YTogRGVyaXZhY2FvW107XG4gICAgZGVyaXZhY2FvTG9va3VwRGlzcGxheUZpZWxkcyA9IFtcImNvZGlnb1wiLCBcImRlc2NyaWNhb1wiXTtcbiAgICBkZXJpdmFjYW9BZHZhbmNlZERpc3BsYXlGaWVsZHMgPSBbXCJpZFwiLCBcImNvZGlnb1wiLCBcImRlc2NyaWNhb1wiXTtcbiAgICBkZXJpdmFjYW9Mb29rdXBTZXBhcmF0b3IgPSBcIiAtIFwiO1xuICAgIGRlcml2YWNhb0xvb2t1cFN1Z2dlc3Rpb25zOiBEZXJpdmFjYW9bXTtcbiAgICBkZXJpdmFjYW9TZWFyY2hUb3RhbFJlY29yZHM6IG51bWJlcjtcblxuICAgIGZpbGlhbFNlYXJjaEZpZWxkczogRm9ybUZpZWxkW107XG4gICAgZmlsaWFsU2VhcmNoR3JpZEZpZWxkczogRm9ybUZpZWxkW107XG4gICAgZmlsaWFsU2VhcmNoR3JpZERhdGE6IEZpbGlhbFtdO1xuICAgIGZpbGlhbExvb2t1cERpc3BsYXlGaWVsZHMgPSBbXCJjb2RpZ29cIiwgXCJub21lXCIsIFwiZW1wcmVzYS5ub21lXCJdO1xuICAgIGZpbGlhbEFkdmFuY2VkRGlzcGxheUZpZWxkcyA9IFtcImlkXCIsIFwiY29kaWdvXCIsIFwibm9tZVwiLCBcImVtcHJlc2Eubm9tZVwiXTtcbiAgICBmaWxpYWxMb29rdXBTZXBhcmF0b3IgPSBcIiAtIFwiO1xuICAgIGZpbGlhbExvb2t1cFN1Z2dlc3Rpb25zOiBGaWxpYWxbXTtcbiAgICBmaWxpYWxTZWFyY2hUb3RhbFJlY29yZHM6IG51bWJlcjtcblxuICAgIGZvcm5lY2Vkb3JTZWFyY2hGaWVsZHM6IEZvcm1GaWVsZFtdO1xuICAgIGZvcm5lY2Vkb3JTZWFyY2hHcmlkRGF0YTogUGVzc29hW107XG4gICAgZm9ybmVjZWRvckxvb2t1cERpc3BsYXlGaWVsZHMgPSBbXCJjb2RpZ29cIiwgXCJub21lXCIsIFwiY3BmQ25walwiXTtcbiAgICBmb3JuZWNlZG9yQWR2YW5jZWREaXNwbGF5RmllbGRzID0gW1wiaWRcIiwgXCJjb2RpZ29cIiwgXCJub21lXCJdO1xuICAgIGZvcm5lY2Vkb3JMb29rdXBTZXBhcmF0b3IgPSBcIiAtIFwiO1xuICAgIGZvcm5lY2Vkb3JMb29rdXBTdWdnZXN0aW9uczogUGVzc29hW107XG4gICAgZm9ybmVjZWRvclNlYXJjaFRvdGFsUmVjb3JkczogbnVtYmVyO1xuXG4gICAgb3JkZW1Db21wcmFTZWFyY2hGaWVsZHM6IEZvcm1GaWVsZFtdO1xuICAgIG9yZGVtQ29tcHJhU2VhcmNoR3JpZEZpZWxkczogRm9ybUZpZWxkW107XG4gICAgb3JkZW1Db21wcmFTZWFyY2hHcmlkRGF0YTogT3JkZW1Db21wcmFbXTtcbiAgICBvcmRlbUNvbXByYUxvb2t1cERpc3BsYXlGaWVsZHMgPSBbXCJjb2RpZ29cIiwgXCJlbXByZXNhLm5vbWVcIl07XG4gICAgb3JkZW1Db21wcmFBZHZhbmNlZERpc3BsYXlGaWVsZHMgPSBbXCJpZFwiLCBcImNvZGlnb1wiLCBcImVtcHJlc2Eubm9tZVwiLCBcImZpbGlhbC5ub21lXCIsIFwicGVzc29hLm5vbWVcIl07XG4gICAgb3JkZW1Db21wcmFMb29rdXBTZXBhcmF0b3IgPSBcIiAtIFwiO1xuICAgIG9yZGVtQ29tcHJhTG9va3VwU3VnZ2VzdGlvbnM6IE9yZGVtQ29tcHJhW107XG4gICAgb3JkZW1Db21wcmFTZWFyY2hUb3RhbFJlY29yZHM6IG51bWJlcjtcblxuICAgIG9yaWdlbU1lcmNhZG9yaWFTZWFyY2hGaWVsZHM6IEZvcm1GaWVsZFtdO1xuICAgIG9yaWdlbU1lcmNhZG9yaWFTZWFyY2hHcmlkRGF0YTogUGVzc29hRW5kZXJlY29bXTtcbiAgICBvcmlnZW1NZXJjYWRvcmlhTG9va3VwRGlzcGxheUZpZWxkcyA9IFtcImNvZGlnb1wiLCBcImVuZGVyZWNvXCJdO1xuICAgIG9yaWdlbU1lcmNhZG9yaWFBZHZhbmNlZERpc3BsYXlGaWVsZHMgPSBbXCJpZFwiLCBcImNvZGlnb1wiLCBcImVuZGVyZWNvXCIsIFwibnVtZXJvXCJdO1xuICAgIG9yaWdlbU1lcmNhZG9yaWFMb29rdXBTZXBhcmF0b3IgPSBcIiAtIFwiO1xuICAgIG9yaWdlbU1lcmNhZG9yaWFMb29rdXBTdWdnZXN0aW9uczogUGVzc29hRW5kZXJlY29bXTtcbiAgICBvcmlnZW1NZXJjYWRvcmlhU2VhcmNoVG90YWxSZWNvcmRzOiBudW1iZXI7XG5cbiAgICBwcm9kdXRvU2VhcmNoRmllbGRzOiBGb3JtRmllbGRbXTtcbiAgICBwcm9kdXRvU2VhcmNoR3JpZERhdGE6IFByb2R1dG9bXTtcbiAgICBwcm9kdXRvTG9va3VwRGlzcGxheUZpZWxkcyA9IFtcImNvZGlnb1wiLCBcImRlc2NyaWNhb1wiXTtcbiAgICBwcm9kdXRvQWR2YW5jZWREaXNwbGF5RmllbGRzID0gW1wiaWRcIiwgXCJjb2RpZ29cIiwgXCJkZXNjcmljYW9cIl07XG4gICAgcHJvZHV0b0xvb2t1cFNlcGFyYXRvciA9IFwiIC0gXCI7XG4gICAgcHJvZHV0b0xvb2t1cFN1Z2dlc3Rpb25zOiBQcm9kdXRvW107XG4gICAgcHJvZHV0b1NlYXJjaFRvdGFsUmVjb3JkczogbnVtYmVyO1xuXG4gICAgc2FmcmFTZWFyY2hGaWVsZHM6IEZvcm1GaWVsZFtdO1xuICAgIHNhZnJhU2VhcmNoR3JpZEZpZWxkczogRm9ybUZpZWxkW107XG4gICAgc2FmcmFTZWFyY2hHcmlkRGF0YTogU2FmcmFbXTtcbiAgICBzYWZyYUxvb2t1cERpc3BsYXlGaWVsZHMgPSBbXCJjb2RpZ29cIiwgXCJkZXNjcmljYW9cIl07XG4gICAgc2FmcmFBZHZhbmNlZERpc3BsYXlGaWVsZHMgPSBbXCJpZFwiLCBcImNvZGlnb1wiLCBcImRlc2NyaWNhb1wiXTtcbiAgICBzYWZyYUxvb2t1cFNlcGFyYXRvciA9IFwiIC0gXCI7XG4gICAgc2FmcmFMb29rdXBTdWdnZXN0aW9uczogU2FmcmFbXTtcbiAgICBzYWZyYVNlYXJjaFRvdGFsUmVjb3JkczogbnVtYmVyO1xuXG4gICAgdHJhbnNwb3J0YWRvcmFTZWFyY2hGaWVsZHM6IEZvcm1GaWVsZFtdO1xuICAgIHRyYW5zcG9ydGFkb3JhU2VhcmNoR3JpZEZpZWxkczogRm9ybUZpZWxkW107XG4gICAgdHJhbnNwb3J0YWRvcmFTZWFyY2hHcmlkRGF0YTogVHJhbnNwb3J0YWRvcmFbXTtcbiAgICB0cmFuc3BvcnRhZG9yYUxvb2t1cERpc3BsYXlGaWVsZHMgPSBbXCJjb2RpZ29cIiwgXCJwZXNzb2Eubm9tZVwiLCBcInBlc3NvYS5jcGZDbnBqXCJdO1xuICAgIHRyYW5zcG9ydGFkb3JhQWR2YW5jZWREaXNwbGF5RmllbGRzID0gW1wiaWRcIiwgXCJjb2RpZ29cIiwgXCJwZXNzb2Eubm9tZVwiLCBcInBlc3NvYS5jcGZDbnBqXCJdO1xuICAgIHRyYW5zcG9ydGFkb3JhTG9va3VwU2VwYXJhdG9yID0gXCIgLSBcIjtcbiAgICB0cmFuc3BvcnRhZG9yYUxvb2t1cFN1Z2dlc3Rpb25zOiBUcmFuc3BvcnRhZG9yYVtdO1xuICAgIHRyYW5zcG9ydGFkb3JhU2VhcmNoVG90YWxSZWNvcmRzOiBudW1iZXI7XG5cbiAgICBkaXNhYmxlQnV0dG9uU2F2ZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgY2hhdmVOb3RhRmlzY2FsOiBzdHJpbmc7XG5cbiAgICB0b3RhbEVpeG9zQ29udHJhdGFkb3M6IG51bWJlciA9IDA7XG4gICAgdG90YWxFaXhvc0NvbXBvc2ljYW86IG51bWJlciA9IDA7XG5cbiAgICBlcnJvQ2hhdmVOb3RhID0gZmFsc2U7XG4gICAgZXJyb0Zvcm5lY2Vkb3JlcyA9IGZhbHNlO1xuXG4gICAgcHVibGljIG5vdGFzVG9rZW5zOiBJVG9rZW5bXSA9IFtdO1xuICAgIHB1YmxpYyBmb3JuZWNlZG9yTm90YXNUb2tlbnM6IElUb2tlbltdID0gW107XG4gICAgcHVibGljIGZvcm5lY2Vkb3JOb3RhcyA9IFtdO1xuXG4gICAgcHJpdmF0ZSBmb3JtQ2FycmVnYWRvID0gZmFsc2U7XG5cbiAgICBvcmRlbUNvbXByYVNlbGVjaW9uYWRvOiBhbnkgPSBudWxsO1xuXG4gICAgcHVibGljIGxvYWRpbmc6IGJvb2xlYW47XG4gICAgcHVibGljIHNhdmVBbmRJbml0QnV0dG9uOiBhbnk7XG4gICAgcHVibGljIGNyZWF0ZWRCeUVycDogYm9vbGVhbjtcblxuICAgIEBJbnB1dCgpIHByaXZhdGUgYWdlbmRhOiBBZ2VuZGE7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IG5nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAgIHByaXZhdGUgZXJwUHJvY2Vzc0RhdGE6IEVycFByb2Nlc3NEYXRhO1xuICAgIHByaXZhdGUgZW5hYmxlUmV2YWxpZGF0aW9uOiBib29sZWFuO1xuXG4gICAgcHJpdmF0ZSBvcmRlbnM6IGFueTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcbiAgICAgICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZmlsaWFsU2VydmljZTogRmlsaWFsU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBwZXNzb2FTZXJ2aWNlOiBQZXNzb2FTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHByb2R1dG9TZXJ2aWNlOiBQcm9kdXRvU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBkZXJpdmFjYW9TZXJ2aWNlOiBEZXJpdmFjYW9TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHRyYW5zcG9ydGFkb3JhU2VydmljZTogVHJhbnNwb3J0YWRvcmFTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIG9yZGVtQ29tcHJhU2VydmljZTogT3JkZW1Db21wcmFTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlY2ViaW1lbnRvT3JkZW1Db21wcmFTZXJ2aWNlOiBSZWNlYmltZW50b09yZGVtQ29tcHJhU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBtZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgICAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgICAgICBwcml2YXRlIG9yaWdlbU1lcmNhZG9yaWFTZXJ2aWNlOiBQZXNzb2FFbmRlcmVjb1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgc2FmcmFTZXJ2aWNlOiBTYWZyYVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgb3ZlcnJpZGU6IFJlY2ViaW1lbnRvT3JkZW1Db21wcmFDaGVnYWRhVmVpY3Vsb092ZXJyaWRlLFxuICAgICAgICBwcml2YXRlIG5vdGFWYWxpZGF0b3JTZXJ2aWNlOiBOb3RhVmFsaWRhdG9yU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjb25maXJtYXRpb25TZXJ2aWNlOiBDb25maXJtYXRpb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgYWdlbmRhU2VydmljZTogQWdlbmRhU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBlcnBQcm9jZXNzU2VydmljZTogRXJwUHJvY2Vzc1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZXJwRm9ybUNvbmZpZ1NlcnZpY2U6IEVycEZvcm1Db25maWdTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHZlcmlmaWNhTm90YUZpc2NhbDogVmVyaWZpY2FOb3RhZmlzY2FsLFxuICAgICAgICBwcml2YXRlIGhhc0NoYW5nZVNlcnZpY2U6IEhhc0NoYW5nZVNlcnZpY2UsXG4gICAgKSB7XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwID0gdGhpcy5nZXRGb3JtR3JvdXAoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMucm91dGUucGFyYW1zLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZSgoeyBhZ2VuZGEgfSkgPT4ge1xuICAgICAgICAgICAgaWYgKGFnZW5kYSA9PSBcIm5ld1wiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uZmlndXJlRm9ybSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5nZXRSZWNlYmltZW50b09yZGVtQ29tcHJhKGFnZW5kYSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwXG4gICAgICAgICAgLmdldCgnZmlsaWFsJylcbiAgICAgICAgICAudmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgLnN1YnNjcmliZSh0aGlzLm9uQ2hhbmdlUmV2YWxpZGF0aW9uKTtcblxuICAgICAgICAgIHRoaXMuZm9ybUdyb3VwXG4gICAgICAgICAgLmdldCgnZm9ybmVjZWRvcmVzJylcbiAgICAgICAgICAudmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgLnN1YnNjcmliZSh0aGlzLm9uQ2hhbmdlUmV2YWxpZGF0aW9uKTtcblxuICAgICAgICB0aGlzLmZvcm1Hcm91cFxuICAgICAgICAgIC5nZXQoJ3RyYW5zcG9ydGFkb3JhJylcbiAgICAgICAgICAudmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgLnN1YnNjcmliZSh0aGlzLm9uQ2hhbmdlUmV2YWxpZGF0aW9uKTtcblxuXG4gICAgICAgIHRoaXMuZGVyaXZhY2FvU2VhcmNoRmllbGRzID0gdGhpcy5nZXREZXJpdmFjYW9TZWFyY2hGaWVsZHMoKTtcbiAgICAgICAgdGhpcy5maWxpYWxTZWFyY2hGaWVsZHMgPSB0aGlzLmdldEZpbGlhbFNlYXJjaEZpZWxkcygpO1xuICAgICAgICB0aGlzLmZpbGlhbFNlYXJjaEdyaWRGaWVsZHMgPSB0aGlzLmdldEZpbGlhbFNlYXJjaEdyaWRGaWVsZHMoKTtcbiAgICAgICAgdGhpcy5mb3JuZWNlZG9yU2VhcmNoRmllbGRzID0gdGhpcy5nZXRGb3JuZWNlZG9yU2VhcmNoRmllbGRzKCk7XG4gICAgICAgIHRoaXMub3JpZ2VtTWVyY2Fkb3JpYVNlYXJjaEZpZWxkcyA9IHRoaXMuZ2V0T3JpZ2VtTWVyY2Fkb3JpYVNlYXJjaEZpZWxkcygpO1xuICAgICAgICB0aGlzLnByb2R1dG9TZWFyY2hGaWVsZHMgPSB0aGlzLmdldFByb2R1dG9TZWFyY2hGaWVsZHMoKTtcbiAgICAgICAgdGhpcy5zYWZyYVNlYXJjaEZpZWxkcyA9IHRoaXMuZ2V0U2FmcmFTZWFyY2hGaWVsZHMoKTtcbiAgICAgICAgdGhpcy5zYWZyYVNlYXJjaEdyaWRGaWVsZHMgPSB0aGlzLmdldFNhZnJhU2VhcmNoR3JpZEZpZWxkcygpO1xuICAgICAgICB0aGlzLnRyYW5zcG9ydGFkb3JhU2VhcmNoRmllbGRzID0gdGhpcy5nZXRUcmFuc3BvcnRhZG9yYVNlYXJjaEZpZWxkcygpO1xuICAgICAgICB0aGlzLnRyYW5zcG9ydGFkb3JhU2VhcmNoR3JpZEZpZWxkcyA9IHRoaXMuZ2V0VHJhbnNwb3J0YWRvcmFTZWFyY2hHcmlkRmllbGRzKCk7XG4gICAgICAgIHRoaXMub3JkZW1Db21wcmFTZWFyY2hGaWVsZHMgPSB0aGlzLmdldE9yZGVtQ29tcHJhRmllbGRzKCk7XG4gICAgICAgIHRoaXMub3JkZW1Db21wcmFTZWFyY2hHcmlkRmllbGRzID0gdGhpcy5nZXRPcmRlbUNvbXByYUdyaWRGaWVsZHMoKTtcblxuICAgICAgICBpZiAodGhpcy5hZ2VuZGEgJiYgdGhpcy5hZ2VuZGEuZXh0ZXJuYWxUZW5hbnQpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0VHJhbnNwb3J0YWRvcmEodGhpcy5hZ2VuZGEuZXh0ZXJuYWxUZW5hbnQuY25waik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmdldEVtcHJlc2FGaWxpYWwoKTtcblxuICAgICAgICB0aGlzLnRvdGFsRWl4b3NDb21wb3NpY2FvID0gdGhpcy5hZ2VuZGEgJiYgdGhpcy5hZ2VuZGEudmVpY3VsbyA/IHRoaXMuYWdlbmRhLnZlaWN1bG8uZWl4b3MgfHwgMCA6IDA7XG5cbiAgICAgICAgY29uc3Qgc3RhdHVzQWdlbmRhID0gW1wiQUdVQVJEQU5ET19DT05GSVJNQUNBT19TT0xJQ0lUQU5URVwiLCBcIkFHRU5EQURPXCIsIFwiQUdVQVJEQU5ET19DT05GSVJNQUNBT1wiLCBcIlJFSkVJVEFET19QT1JfVkFMSURBQ0FPXCJdO1xuICAgICAgICBpZiAodGhpcy5hZ2VuZGEgJiYgIXN0YXR1c0FnZW5kYS5pbmNsdWRlcyh0aGlzLmFnZW5kYS5zdGF0dXMpKSB7XG4gICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZGlzYWJsZSgpO1xuICAgICAgICAgIHRoaXMuZGlzYWJsZUJ1dHRvblNhdmUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3JlYXRlZEJ5RXJwRGlzYWJsZUZvcm0oKTtcblxuICAgICAgICB0aGlzLmVycFByb2Nlc3NTZXJ2aWNlLmN1cnJlbnQuc3Vic2NyaWJlKG1lc3NhZ2UgPT4gdGhpcy5lcnBQcm9jZXNzRGF0YSA9IG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLmVycEZvcm1Db25maWdTZXJ2aWNlLmN1cnJlbnQuc3Vic2NyaWJlKG1lc3NhZ2UgPT4gdGhpcy5lbmFibGVSZXZhbGlkYXRpb24gPSBtZXNzYWdlKTtcbiAgICAgICAgdGhpcy52ZXJpZmljYVNlVGVtQWx0ZXJhY2FvKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB2ZXJpZmljYVNlVGVtQWx0ZXJhY2FvKCkge1xuICAgICAgICB0aGlzLmZvcm1Hcm91cC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmZvcm1DYXJyZWdhZG8pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhc0NoYW5nZVNlcnZpY2UuaGFzQ2hhbmdlKHRoaXMuYWdlbmRhLmlkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLm92ZXJyaWRlLmluaXRpYWxpemUoKTtcbiAgICAgICAgdGhpcy5zYXZlQW5kSW5pdEJ1dHRvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbml0Jyk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpO1xuICAgICAgICB0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5vdmVycmlkZS5yZW1vdmUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlZEJ5RXJwRGlzYWJsZUZvcm0oKSB7XG4gICAgICAgIGlmICh0aGlzLmFnZW5kYSAmJiB0aGlzLmFnZW5kYS5jcmVhdGVkQnlFcnApIHtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlZEJ5RXJwID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldCgnZmlsaWFsJykuZGlzYWJsZSgpO1xuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KCdwcm9kdXRvJykuZGlzYWJsZSgpO1xuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KCdkZXJpdmFjYW8nKS5kaXNhYmxlKCk7XG4gICAgICAgICAgICBpZiAoISF0aGlzLmZvcm1Hcm91cC5nZXQoXCJ0cmFuc3BvcnRhZG9yYVwiKS52YWx1ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldCgndHJhbnNwb3J0YWRvcmEnKS5kaXNhYmxlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbmZpZ3VyZUZvcm0oKSB7XG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2VzKHRoaXMuZm9ybUdyb3VwLCBcImZpbGlhbFwiLCB0aGlzLm9uRmlsaWFsVmFsdWVDaGFuZ2UpO1xuICAgICAgICBjb25zdCBnZXRGaWx0ZXJRdWVyeVByb2R1dG8gPSAodmFsdWU6IGFueSkgPT4gYHByb2R1dG8uaWQgZXEgJyR7dmFsdWUuaWR9JyBhbmQgc2l0dWFjYW8gZXEgJ0FUSVZPJ2A7XG4gICAgICAgIHRoaXMuY2hlY2tWYWx1ZXNDaGFuZ2VzKHRoaXMuZm9ybUdyb3VwLCBcInByb2R1dG9cIiwgXCJkZXJpdmFjYW9cIiwgdGhpcy5kZXJpdmFjYW9TZXJ2aWNlLCBnZXRGaWx0ZXJRdWVyeVByb2R1dG8sXG4gICAgICAgICAgICBbJ2NvZGlnbycsICdkZXNjcmljYW8nXSwgKHZhbCkgPT4gRGVyaXZhY2FvLmZyb21EdG8odmFsKSwgIDEwLCB0cnVlLCB0cnVlXG4gICAgICAgICk7XG5cbiAgICAgICAgKHRoaXMuZm9ybUdyb3VwLmdldChcImZvcm5lY2Vkb3Jlc1wiKSBhcyBGb3JtQXJyYXkpLnZhbHVlQ2hhbmdlc1xuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKGZvcm5lY2Vkb3JlcyA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCEhZm9ybmVjZWRvcmVzICYmIGZvcm5lY2Vkb3Jlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChcInByb2R1dG9cIikuZGlzYWJsZSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoXCJkZXJpdmFjYW9cIikuZGlzYWJsZSgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChcInByb2R1dG9cIikuZW5hYmxlKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChcImRlcml2YWNhb1wiKS5lbmFibGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZWRCeUVycERpc2FibGVGb3JtKCk7XG4gICAgICAgICAgICB0aGlzLmZvcm1DYXJyZWdhZG8gPSB0cnVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RW1wcmVzYUZpbGlhbCgpIHtcbiAgICAgICAgY29uc3QgcGxhbnRhID0gdGhpcy5hZ2VuZGEucGxhbnRhIHx8IHsgY25wajogW10gfTtcbiAgICAgICAgaWYgKHBsYW50YS5jbnBqLmxlbmd0aCAhPT0gMSkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IGZpbHRlclF1ZXJ5ID0gYHBlc3NvYS5jcGZDbnBqIGVxICcke3BsYW50YS5jbnBqWzBdfSdgO1xuICAgICAgICB0aGlzLmZpbGlhbFNlcnZpY2UubGlzdCh7IGZpbHRlclF1ZXJ5LCBwYWdlOiAwLCBzaXplOiAxMCB9KVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCh7IGNvbnRlbnRzIH0pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoY29udGVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbGlhbCA9IGNvbnRlbnRzWzBdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbXByZXNhID0gY29udGVudHNbMF0uZW1wcmVzYTtcbiAgICAgICAgICAgICAgICAgICAgZmlsaWFsLmxhYmVsID0gYCR7ZmlsaWFsLmNvZGlnb30gLSAke2ZpbGlhbC5ub21lfWA7XG4gICAgICAgICAgICAgICAgICAgIGVtcHJlc2EubGFiZWwgPSBgJHtlbXByZXNhLmNvZGlnb30gLSAke2VtcHJlc2Eubm9tZX1gO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoJ2VtcHJlc2EnKS5zZXRWYWx1ZShlbXByZXNhKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KCdmaWxpYWwnKS5zZXRWYWx1ZShmaWxpYWwpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoJ2ZpbGlhbCcpLmVuYWJsZSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoJ3Byb2R1dG8nKS5lbmFibGUoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KCdvcmRlbUNvbXByYScpLmVuYWJsZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2hlY2tWYWx1ZXNDaGFuZ2VzKGZvcm1Hcm91cDogRm9ybUdyb3VwLCBmb3JtQ29udHJvbFVwZGF0ZWQ6IHN0cmluZywgZm9ybUNvbnRyb2xEZXBlbmRlbnQ6IHN0cmluZywgc2VydmljZTogYW55LCBnZXRGaWx0ZXJRdWVyeTogYW55LFxuICAgICAgICB2YXJpYWJsZXM6IGFueSwgZHRvQ29udmVydGVyOiAodmFsOiBhbnkpID0+IGFueSwgcXVlcnlTaXplOiBudW1iZXIgPSAxLCBpc0NoYW5nZVZhbGlkYXRvcnM/OiBib29sZWFuLCBjbGVhckZvcm1Db250cm9sRGVwZW5kZW50PzogYm9vbGVhbikge1xuICAgICAgICBmb3JtR3JvdXAuZ2V0KGZvcm1Db250cm9sVXBkYXRlZClcbiAgICAgICAgICAgIC52YWx1ZUNoYW5nZXNcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLFxuICAgICAgICAgICAgICAgIGRlYm91bmNlVGltZSg1MDApLFxuICAgICAgICAgICAgICAgIGZpbHRlcih2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0NoYW5nZVZhbGlkYXRvcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5nZXQoZm9ybUNvbnRyb2xEZXBlbmRlbnQpLnNldFZhbGlkYXRvcnModmFsdWUgPyBWYWxpZGF0b3JzLnJlcXVpcmVkIDogVmFsaWRhdG9ycy5udWxsVmFsaWRhdG9yKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoY2xlYXJGb3JtQ29udHJvbERlcGVuZGVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmdldChmb3JtQ29udHJvbERlcGVuZGVudCkuc2V0VmFsdWUobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmdldChmb3JtQ29udHJvbERlcGVuZGVudCkuc2V0VmFsdWUobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuZ2V0KGZvcm1Db250cm9sRGVwZW5kZW50KS5kaXNhYmxlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgbWVyZ2VNYXAoKHZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyUXVlcnkgPSBnZXRGaWx0ZXJRdWVyeSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXJ2aWNlLmxpc3QoeyBmaWx0ZXJRdWVyeSwgcGFnZTogMCwgc2l6ZTogcXVlcnlTaXplIH0pO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCh7IGNvbnRlbnRzIH0pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWNvbnRlbnRzIHx8ICFjb250ZW50cy5sZW5ndGggfHwgY29udGVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm9ybUdyb3VwLmdldChmb3JtQ29udHJvbERlcGVuZGVudCkuZW5hYmxlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChjb250ZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGVudHNbMF0ubGFiZWwgPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGdldExvb2t1cExhYmVsKGNvbnRlbnRzWzBdLCB2YXJpYWJsZXMsICcgLSAnLCB0cnVlKSk7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5nZXQoZm9ybUNvbnRyb2xEZXBlbmRlbnQpLnNldFZhbHVlKGR0b0NvbnZlcnRlcihjb250ZW50c1swXSkpO1xuICAgICAgICAgICAgICAgIH0gXG5cbiAgICAgICAgICAgICAgICBpZiAoY29udGVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuZ2V0KGZvcm1Db250cm9sRGVwZW5kZW50KS5lbmFibGUoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuZ2V0KGZvcm1Db250cm9sRGVwZW5kZW50KS5kaXNhYmxlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uQmx1ckNoYXZlTm90YUZpc2NhbCgpIHtcbiAgICAgICAgaWYgKHRoaXMudmVyaWZpY2FOb3RhRmlzY2FsLnZlcmlmaWNhU2VOb3RhRmlzY2FsRXN0YUR1cGxpY2FkYSh0aGlzLmNoYXZlTm90YUZpc2NhbCwgIHRoaXMub3JkZW5zLCB0aGlzLmZvcm5lY2Vkb3JOb3Rhc1Rva2VucykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVtb3ZlTm90YUVycm9yKCk7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5jaGF2ZU5vdGFGaXNjYWw7XG4gICAgICAgIGlmICghIXZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5tZW5zYWdlbUJ1c2NhbmRvTm90YSgpO1xuXG4gICAgICAgICAgICB0aGlzLm5vdGFWYWxpZGF0b3JTZXJ2aWNlLnBlc3F1aXNhckRvY3VtZW50b1ZhbGlkYU5vdGFFbVVzbyh7XG4gICAgICAgICAgICAgICAgZmlsaWFsSWQ6ICh0aGlzLmZvcm1Hcm91cC5nZXQoXCJmaWxpYWxcIikudmFsdWUgJiYgdGhpcy5mb3JtR3JvdXAuZ2V0KFwiZmlsaWFsXCIpLnZhbHVlLmlkKSB8fCBudWxsLFxuICAgICAgICAgICAgICAgIGNoYXZlRG9jdW1lbnRvOiB2YWx1ZS50cmltKCkgfHwgXCJcIlxuICAgICAgICAgICAgfSkucGlwZShcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSxcbiAgICAgICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB0aGlzLmxvYWRpbmcgPSBmYWxzZSlcbiAgICAgICAgICAgICkuc3Vic2NyaWJlKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkTm92YU5vdGEocmVzcG9uc2UpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHZhbHVlQ2hhbmdlcyhmb3JtR3JvdXA6IEZvcm1Hcm91cCwgcGF0aDogc3RyaW5nLCBzdWJzY3JpYmU6IGFueSkge1xuICAgICAgICBmb3JtR3JvdXAuZ2V0KHBhdGgpXG4gICAgICAgICAgICAudmFsdWVDaGFuZ2VzXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUodmFsdWUgPT4gc3Vic2NyaWJlKHZhbHVlLCBmb3JtR3JvdXApKTtcbiAgICB9XG5cbiAgICAvKipQUk9EVVRPIERFUEVOREUgREUgRklMSUFMLiBPUkRFTSBDT01QUkEgREVQRU5ERSBERSBGSUxJQUwgKi9cbiAgICBwcml2YXRlIG9uRmlsaWFsVmFsdWVDaGFuZ2UgPSAoZmlsaWFsOiBGaWxpYWwsIGZvcm1Hcm91cDogRm9ybUdyb3VwKSA9PiB7XG4gICAgICAgIHRoaXMuY2hhbmdlRm9ybUdyb3VwVmFsdWUoZmlsaWFsLCBcInByb2R1dG9cIiwgZm9ybUdyb3VwKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uRm9ybmVjZWRvckNoYW5nZSA9IChmb3JuZWNlZG9yOiBQZXNzb2FFbmRlcmVjbywgZm9ybUdyb3VwOiBGb3JtR3JvdXApID0+IHtcbiAgICAgICAgdGhpcy5jaGFuZ2VGb3JtR3JvdXBWYWx1ZShmb3JuZWNlZG9yLCBcIm9yaWdlbU1lcmNhZG9yaWFcIiwgZm9ybUdyb3VwKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VGb3JtR3JvdXBWYWx1ZShmb3JuZWNlZG9yLCBcIm9yZGVuc1wiLCBmb3JtR3JvdXApO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2hhbmdlRm9ybUdyb3VwVmFsdWUoaXNBbnk6IGFueSwgZm9ybUNvbnRyb2w6IHN0cmluZywgZm9ybUdyb3VwOiBhbnkpIHtcbiAgICAgICAgaWYgKCFpc0FueSkge1xuICAgICAgICAgICAgZm9ybUdyb3VwLmdldChmb3JtQ29udHJvbCkuc2V0VmFsdWUodW5kZWZpbmVkKTtcbiAgICAgICAgICAgIGZvcm1Hcm91cC5nZXQoZm9ybUNvbnRyb2wpLmRpc2FibGUoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvcm1Hcm91cC5nZXQoZm9ybUNvbnRyb2wpLmVuYWJsZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRSZWNlYmltZW50b09yZGVtQ29tcHJhKGFnZW5kYUlkOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5yZWNlYmltZW50b09yZGVtQ29tcHJhU2VydmljZS5saXN0KHtcbiAgICAgICAgICAgIGZpbHRlclF1ZXJ5OiBgYWdlbmRhLmlkIGVxICcke2FnZW5kYUlkfSdgLFxuICAgICAgICAgICAgc2l6ZTogMSxcbiAgICAgICAgICAgIHBhZ2U6IDBcbiAgICAgICAgfSlcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksIGZpbmFsaXplKCgpID0+IHRoaXMubG9hZGluZyA9IGZhbHNlKSlcbiAgICAgICAgLnN1YnNjcmliZSgoeyBjb250ZW50cyB9KSA9PiB7XG4gICAgICAgICAgICBpZiAoIWNvbnRlbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybUNhcnJlZ2FkbyA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uZmlndXJlRm9ybSgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnRvdGFsRWl4b3NDb250cmF0YWRvcyA9IGNvbnRlbnRzWzBdLmVpeG9zIHx8IDA7XG4gICAgICAgICAgICB0aGlzLnRvdGFsRWl4b3NDb21wb3NpY2FvID0gY29udGVudHNbMF0uYWdlbmRhICYmIGNvbnRlbnRzWzBdLmFnZW5kYS52ZWljdWxvIFxuICAgICAgICAgICAgICAgID8gY29udGVudHNbMF0uYWdlbmRhLnZlaWN1bG8uZWl4b3MgfHwgMCA6IDA7XG5cbiAgICAgICAgICAgIGNvbnN0IHJlY2ViaW1lbnRvT3JkZW1Db21wcmE6IFJlY2ViaW1lbnRvT3JkZW1Db21wcmFEdG8gPSBSZWNlYmltZW50b09yZGVtQ29tcHJhLmZyb21EdG8oY29udGVudHNbMF0pO1xuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZW5hYmxlKCk7XG4gICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKHJlY2ViaW1lbnRvT3JkZW1Db21wcmEpO1xuXG4gICAgICAgICAgICByZWNlYmltZW50b09yZGVtQ29tcHJhLmZvcm5lY2Vkb3Jlcy5mb3JFYWNoKGZvcm5lY2Vkb3IgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZvcm0gPSB0aGlzLmdldEZvcm5lY2Vkb3JGb3JtKGZvcm5lY2Vkb3IpO1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0Rm9ybmVjZWRvcmVzRm9ybSgpLnB1c2goZm9ybSk7XG5cbiAgICAgICAgICAgICAgICBmb3JuZWNlZG9yLm9yZGVucy5mb3JFYWNoKG9yZGVtQ29tcHJhID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3JkZW1Db21wcmFGb3JtID0gdGhpcy5nZXRPcmRlbUNvbXByYUZvcm0ob3JkZW1Db21wcmEpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldE9yZGVuc0NvbXByYShmb3JtKS5wdXNoKG9yZGVtQ29tcHJhRm9ybSk7XG4gICAgICAgICAgICAgICAgICAgIG9yZGVtQ29tcHJhLm5vdGFzLmZvckVhY2gobm90YSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBub3RhRm9ybSA9IHRoaXMuZ2V0Tm90YUZvcm0obm90YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldE5vdGFzKG9yZGVtQ29tcHJhRm9ybSkucHVzaChub3RhRm9ybSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmNvbmZpZ3VyZUZvcm0oKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uRmlsaWFsTG9va3VwUmVxdWVzdCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGZpbHRlcklucHV0ID0gdGhpcy5nZXRGaWxpYWxTZWFyY2hGaWVsZHMoKVxuICAgICAgICAgICAgLmZpbHRlcigoeyB0eXBlIH0pID0+IGlzVmFsaWRGaWx0ZXIodHlwZSwgdmFsdWUpKVxuICAgICAgICAgICAgLnJlZHVjZSgoYSwgeyBuYW1lLCB0eXBlIH0pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gRmllbGRUeXBlLkludGVnZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgLi4uYSwgW25hbWVdOiB2YWx1ZS5yZXBsYWNlKC9cXEQvLCBcIlwiKSB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4geyAuLi5hLCBbbmFtZV06IHZhbHVlIH07XG4gICAgICAgICAgICB9LCB7IGNucGpzOiB0aGlzLmFnZW5kYS5wbGFudGEuY25waiwgcGFnaW5hOiB7IGxpbWl0OiAxMCwgb2Zmc2V0OiAwIH0gfSBhcyBQZXNxdWlzYXJGaWxpYWlzSW5wdXQpO1xuXG4gICAgICAgIHRoaXMuZmlsaWFsU2VydmljZVxuICAgICAgICAgICAgLmxpc3RGaWxpYWlzKGZpbHRlcklucHV0KVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChsaXN0OiBhbnkpID0+XG4gICAgICAgICAgICAgICAgdGhpcy5maWxpYWxMb29rdXBTdWdnZXN0aW9ucyA9IGxpc3QuZmlsaWFpcy5tYXAoKGZpbGlhbDogYW55KSA9PiBGaWxpYWwuZnJvbUR0byhmaWxpYWwpKVxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25GaWxpYWxTZWFyY2hSZXF1ZXN0KGV2ZW50OiBhbnkpIHtcbiAgICAgICAgY29uc3QgeyBmaXJzdCwgcm93cywgbXVsdGlTb3J0TWV0YSwgZmlsdGVyRGF0YSB9ID0gZXZlbnQ7XG4gICAgICAgIGNvbnN0IHBhZ2UgPSBmaXJzdCAvIHJvd3M7XG4gICAgICAgIGNvbnN0IHNvcnQ6IFNvcnRNZXRhW10gPSBtdWx0aVNvcnRNZXRhO1xuICAgICAgICBjb25zdCBzb3J0Rm9ybWF0dGVkID0gISEoc29ydCB8fCBbXSkubGVuZ3RoICYmIHsgY2FtcG86IHNvcnRbMF0uZmllbGQsIG9yZGVuYWNhbzogc29ydFswXS5vcmRlciA+IDAgPyAnQXNjJyA6ICdEZXNjJyB9O1xuICAgICAgICBjb25zdCBmaWx0ZXJJbnB1dCA9IHRoaXMuZ2V0RmlsaWFsU2VhcmNoRmllbGRzKClcbiAgICAgICAgICAgIC5maWx0ZXIoKHsgbmFtZSB9KSA9PiBmaWx0ZXJEYXRhW25hbWVdICE9IHVuZGVmaW5lZCAmJiBmaWx0ZXJEYXRhW25hbWVdICE9IFwiXCIpXG4gICAgICAgICAgICAucmVkdWNlKChhLCB7IG5hbWUsIHR5cGUgfSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZmlsdGVyRGF0YVtuYW1lXTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gRmllbGRUeXBlLkludGVnZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgLi4uYSwgW25hbWVdOiBgJHt2YWx1ZX1gLnJlcGxhY2UoL1xcRC8sIFwiXCIpIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLmEsIFtuYW1lXTogdmFsdWUgfTtcbiAgICAgICAgICAgIH0sIHsgY25wanM6IHRoaXMuYWdlbmRhLnBsYW50YS5jbnBqLCBwYWdpbmE6IHsgbGltaXQ6IHJvd3MsIG9mZnNldDogcGFnZSwgbGlzdGFPcmRlbmFjYW86IHNvcnRGb3JtYXR0ZWQgPyBbIHsgLi4uKHNvcnRGb3JtYXR0ZWQpIH0gXSA6IG51bGwgfSB9IGFzIFBlc3F1aXNhckZpbGlhaXNJbnB1dCk7XG5cbiAgICAgICAgdGhpcy5maWxpYWxTZXJ2aWNlXG4gICAgICAgICAgICAubGlzdEZpbGlhaXMoZmlsdGVySW5wdXQpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGxpc3Q6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsaWFsU2VhcmNoR3JpZERhdGEgPSBsaXN0LmZpbGlhaXMubWFwKEZpbGlhbC5mcm9tRHRvKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbGlhbFNlYXJjaFRvdGFsUmVjb3JkcyA9IGxpc3QucXRkVG90YWxSZWdpc3Ryb3M7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipGSUxUUkEgRk9STkVDRURPUiBFUSBUUlVFICovXG4gICAgcHVibGljIG9uRm9ybmVjZWRvckxvb2t1cFJlcXVlc3QodmFsdWU6IHN0cmluZykge1xuICAgICAgICBvbkxvb2t1cFJlcXVlc3QodGhpcy5mb3JuZWNlZG9yU2VhcmNoRmllbGRzLCB0aGlzLmZvcm5lY2Vkb3JMb29rdXBEaXNwbGF5RmllbGRzLFxuICAgICAgICAgICAgdGhpcy5mb3JuZWNlZG9yQWR2YW5jZWREaXNwbGF5RmllbGRzLCB0aGlzLmZvcm5lY2Vkb3JMb29rdXBTZXBhcmF0b3IsIHRoaXMucGVzc29hU2VydmljZSwgXG4gICAgICAgICAgICB2YWx1ZSwgYCBmb3JuZWNlZG9yIGVxIHRydWUgYClcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgobGlzdDogYW55KSA9PiB0aGlzLmZvcm5lY2Vkb3JMb29rdXBTdWdnZXN0aW9ucyA9IGxpc3QuY29udGVudHMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkZvcm5lY2Vkb3JTZWFyY2hSZXF1ZXN0KGV2ZW50OiBhbnkpIHtcbiAgICAgICAgb25TZWFyY2hSZXF1ZXN0KHRoaXMuZm9ybmVjZWRvclNlYXJjaEZpZWxkcywgdGhpcy5mb3JuZWNlZG9yTG9va3VwRGlzcGxheUZpZWxkcyxcbiAgICAgICAgICAgIHRoaXMuZm9ybmVjZWRvckFkdmFuY2VkRGlzcGxheUZpZWxkcywgdGhpcy5mb3JuZWNlZG9yTG9va3VwU2VwYXJhdG9yLCB0aGlzLnBlc3NvYVNlcnZpY2UsIFxuICAgICAgICAgICAgZXZlbnQsIGAgZm9ybmVjZWRvciBlcSB0cnVlIGApXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGxpc3Q6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybmVjZWRvclNlYXJjaEdyaWREYXRhID0gbGlzdC5jb250ZW50cztcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm5lY2Vkb3JTZWFyY2hUb3RhbFJlY29yZHMgPSBsaXN0LnRvdGFsRWxlbWVudHM7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipGSUxUUkEgT1JJR0VNIE1FUkNBRE9SSUEgUEVMTyBGT1JORUNFRE9SIFNFTEVDSU9OQURPICovXG4gICAgcHVibGljIG9uT3JpZ2VtTWVyY2Fkb3JpYUxvb2t1cFJlcXVlc3QoZm9ybmVjZWRvckZvcm06IEZvcm1Hcm91cCwgdmFsdWU6IHN0cmluZykge1xuICAgICAgICBvbkxvb2t1cFJlcXVlc3QodGhpcy5vcmlnZW1NZXJjYWRvcmlhU2VhcmNoRmllbGRzLCB0aGlzLm9yaWdlbU1lcmNhZG9yaWFMb29rdXBEaXNwbGF5RmllbGRzLFxuICAgICAgICAgICAgdGhpcy5vcmlnZW1NZXJjYWRvcmlhQWR2YW5jZWREaXNwbGF5RmllbGRzLCB0aGlzLm9yaWdlbU1lcmNhZG9yaWFMb29rdXBTZXBhcmF0b3IsIHRoaXMub3JpZ2VtTWVyY2Fkb3JpYVNlcnZpY2UsIFxuICAgICAgICAgICAgdmFsdWUsIGAgcGVzc29hLmlkIGVxICcke2Zvcm5lY2Vkb3JGb3JtLmdldChcImZvcm5lY2Vkb3JcIikudmFsdWUuaWR9JyBgKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChsaXN0OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9yaWdlbU1lcmNhZG9yaWFMb29rdXBTdWdnZXN0aW9ucyA9IGxpc3QuY29udGVudHM7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25PcmlnZW1NZXJjYWRvcmlhU2VhcmNoUmVxdWVzdChmb3JuZWNlZG9yRm9ybTogRm9ybUdyb3VwLCBldmVudDogYW55KSB7XG4gICAgICAgIG9uU2VhcmNoUmVxdWVzdCh0aGlzLm9yaWdlbU1lcmNhZG9yaWFTZWFyY2hGaWVsZHMsIHRoaXMub3JpZ2VtTWVyY2Fkb3JpYUxvb2t1cERpc3BsYXlGaWVsZHMsXG4gICAgICAgICAgICB0aGlzLm9yaWdlbU1lcmNhZG9yaWFBZHZhbmNlZERpc3BsYXlGaWVsZHMsIHRoaXMub3JpZ2VtTWVyY2Fkb3JpYUxvb2t1cFNlcGFyYXRvciwgdGhpcy5vcmlnZW1NZXJjYWRvcmlhU2VydmljZSwgZXZlbnQsXG4gICAgICAgICAgICBgIHBlc3NvYS5pZCBlcSAnJHtmb3JuZWNlZG9yRm9ybS5nZXQoXCJmb3JuZWNlZG9yXCIpLnZhbHVlLmlkfScgYClcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgobGlzdDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcmlnZW1NZXJjYWRvcmlhU2VhcmNoR3JpZERhdGEgPSBsaXN0LmNvbnRlbnRzO1xuICAgICAgICAgICAgICAgIHRoaXMub3JpZ2VtTWVyY2Fkb3JpYVNlYXJjaFRvdGFsUmVjb3JkcyA9IGxpc3QudG90YWxFbGVtZW50cztcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKkZJTFRSQSBERVJJVkFDQU8gUEVMTyBQUk9EVVRPICovXG4gICAgcHVibGljIG9uRGVyaXZhY2FvTG9va3VwUmVxdWVzdCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIG9uTG9va3VwUmVxdWVzdCh0aGlzLmRlcml2YWNhb1NlYXJjaEZpZWxkcywgdGhpcy5kZXJpdmFjYW9Mb29rdXBEaXNwbGF5RmllbGRzLCB0aGlzLmRlcml2YWNhb0FkdmFuY2VkRGlzcGxheUZpZWxkcyxcbiAgICAgICAgICAgIHRoaXMuZGVyaXZhY2FvTG9va3VwU2VwYXJhdG9yLCB0aGlzLmRlcml2YWNhb1NlcnZpY2UsIHZhbHVlLFxuICAgICAgICAgICAgYCBwcm9kdXRvLmlkIGVxICcke3RoaXMuZm9ybUdyb3VwLmdldChcInByb2R1dG9cIikudmFsdWUuaWR9JyBgKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChsaXN0OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlcml2YWNhb0xvb2t1cFN1Z2dlc3Rpb25zID0gbGlzdC5jb250ZW50cztcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkRlcml2YWNhb1NlYXJjaFJlcXVlc3QoZXZlbnQ6IGFueSkge1xuICAgICAgICBvblNlYXJjaFJlcXVlc3QodGhpcy5kZXJpdmFjYW9TZWFyY2hGaWVsZHMsIHRoaXMuZGVyaXZhY2FvTG9va3VwRGlzcGxheUZpZWxkcyxcbiAgICAgICAgICAgIHRoaXMuZGVyaXZhY2FvQWR2YW5jZWREaXNwbGF5RmllbGRzLCB0aGlzLmRlcml2YWNhb0xvb2t1cFNlcGFyYXRvciwgdGhpcy5kZXJpdmFjYW9TZXJ2aWNlLCBldmVudCxcbiAgICAgICAgICAgIGAgcHJvZHV0by5pZCBlcSAnJHt0aGlzLmZvcm1Hcm91cC5nZXQoXCJwcm9kdXRvXCIpLnZhbHVlLmlkfScgYClcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgobGlzdDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXJpdmFjYW9TZWFyY2hHcmlkRGF0YSA9IGxpc3QuY29udGVudHM7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXJpdmFjYW9TZWFyY2hUb3RhbFJlY29yZHMgPSBsaXN0LnRvdGFsRWxlbWVudHM7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25PcmRlbUNvbXByYUxvb2t1cFJlcXVlc3QoZm9ybmVjZWRvckZvcm06IEZvcm1Hcm91cCwgdmFsdWU6IHN0cmluZykge1xuICAgICAgICBvbkxvb2t1cFJlcXVlc3QodGhpcy5vcmRlbUNvbXByYVNlYXJjaEZpZWxkcywgdGhpcy5vcmRlbUNvbXByYUxvb2t1cERpc3BsYXlGaWVsZHMsIHRoaXMub3JkZW1Db21wcmFBZHZhbmNlZERpc3BsYXlGaWVsZHMsXG4gICAgICAgICAgICB0aGlzLm9yZGVtQ29tcHJhTG9va3VwU2VwYXJhdG9yLCB0aGlzLm9yZGVtQ29tcHJhU2VydmljZSwgdmFsdWUsXG4gICAgICAgICAgICBgZmlsaWFsLmlkIGVxICcke3RoaXMuZm9ybUdyb3VwLmdldChcImZpbGlhbFwiKS52YWx1ZS5pZH0nIGFuZCBwZXNzb2EuaWQgZXEgJyR7Zm9ybmVjZWRvckZvcm0uZ2V0KFwiZm9ybmVjZWRvclwiKS52YWx1ZS5pZH0nYClcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgobGlzdDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcmRlbUNvbXByYUxvb2t1cFN1Z2dlc3Rpb25zID0gbGlzdC5jb250ZW50cztcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbk9yZGVtQ29tcHJhU2VhcmNoUmVxdWVzdChmb3JuZWNlZG9yRm9ybTogRm9ybUdyb3VwLCBldmVudDogYW55KSB7XG4gICAgICAgIG9uU2VhcmNoUmVxdWVzdCh0aGlzLm9yZGVtQ29tcHJhU2VhcmNoRmllbGRzLCB0aGlzLm9yZGVtQ29tcHJhTG9va3VwRGlzcGxheUZpZWxkcyxcbiAgICAgICAgICAgIHRoaXMub3JkZW1Db21wcmFBZHZhbmNlZERpc3BsYXlGaWVsZHMsIHRoaXMub3JkZW1Db21wcmFMb29rdXBTZXBhcmF0b3IsIHRoaXMub3JkZW1Db21wcmFTZXJ2aWNlLCBldmVudCxcbiAgICAgICAgICAgIGBmaWxpYWwuaWQgZXEgJyR7dGhpcy5mb3JtR3JvdXAuZ2V0KFwiZmlsaWFsXCIpLnZhbHVlLmlkfScgYW5kIHBlc3NvYS5pZCBlcSAnJHtmb3JuZWNlZG9yRm9ybS5nZXQoXCJmb3JuZWNlZG9yXCIpLnZhbHVlLmlkfSdgKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChsaXN0OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9yZGVtQ29tcHJhU2VhcmNoR3JpZERhdGEgPSBsaXN0LmNvbnRlbnRzO1xuICAgICAgICAgICAgICAgIHRoaXMub3JkZW1Db21wcmFTZWFyY2hUb3RhbFJlY29yZHMgPSBsaXN0LnRvdGFsRWxlbWVudHM7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkT3JkZW1Db21wcmEoZm9ybmVjZWRvckZvcm06IEZvcm1Hcm91cCkge1xuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2VcbiAgICAgICAgICAgIC5vcGVuKE9yZGVtQ29tcHJhRm9ybUNvbXBvbmVudCwge1xuICAgICAgICAgICAgICAgIC4uLmRpYWxvZ0NvbmZpZyxcbiAgICAgICAgICAgICAgICBoZWFkZXI6ICdBZGljaW9uYXIgT3JkZW0gZGUgQ29tcHJhJyxcbiAgICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgIGFnZW5kYTogdGhpcy5hZ2VuZGEsXG4gICAgICAgICAgICAgICAgICAgIGZpbGlhbDogdGhpcy5mb3JtR3JvdXAuZ2V0KFwiZmlsaWFsXCIpLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBmb3JuZWNlZG9yOiBmb3JuZWNlZG9yRm9ybS5nZXQoXCJmb3JuZWNlZG9yXCIpLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBvcmRlbnM6IGZvcm5lY2Vkb3JGb3JtLmdldChcIm9yZGVuc1wiKS52YWx1ZSxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLm9uQ2xvc2VcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLCBmaWx0ZXIodmFsdWUgPT4gISF2YWx1ZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChvcmRlbUNvbXByYTogYW55KSA9PiB0aGlzLm9uT3JkZW1Db21wcmFTYXZlZChvcmRlbUNvbXByYSwgZm9ybmVjZWRvckZvcm0pKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Qcm9kdXRvTG9va3VwUmVxdWVzdCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGZpbGlhbCA9IHRoaXMuZm9ybUdyb3VwLmdldChcImZpbGlhbFwiKS52YWx1ZTtcbiAgICAgICAgY29uc3QgdGlwb0FnZW5kYW1lbnRvID0gdGhpcy5hZ2VuZGEudGlwb0FnZW5kYW1lbnRvO1xuXG4gICAgICAgIHRoaXMucHJvZHV0b1NlcnZpY2UubGlzdFByb2R1dG9zKHtcbiAgICAgICAgICAgIHBlc3F1aXNhOiB2YWx1ZSxcbiAgICAgICAgICAgIGVtcHJlc2FJZDogISFmaWxpYWwgPyBmaWxpYWwuZW1wcmVzYS5pZCA6IG51bGwsXG4gICAgICAgICAgICBmaWxpYWxJZDogISFmaWxpYWwgPyBmaWxpYWwuaWQgOiBudWxsLFxuICAgICAgICAgICAgdGlwb0FnZW5kYW1lbnRvSWQ6ICEhdGlwb0FnZW5kYW1lbnRvID8gdGlwb0FnZW5kYW1lbnRvLmlkIDogbnVsbCxcbiAgICAgICAgICAgIHNpdHVhY2FvOiAnQVRJVk8nLFxuICAgICAgICAgICAgcGFnaW5hOiB7XG4gICAgICAgICAgICAgICAgbGltaXQ6IDEwMCxcbiAgICAgICAgICAgICAgICBvZmZzZXQ6IDBcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgIC5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB0aGlzLnByb2R1dG9Mb29rdXBTdWdnZXN0aW9ucyA9IHJlcy5wcm9kdXRvcy5tYXAoUHJvZHV0by5mcm9tRHRvKSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUHJvZHV0b1NlYXJjaFJlcXVlc3QoZXZlbnQ6IGFueSkge1xuICAgICAgICBjb25zdCB7IGZpcnN0LCByb3dzLCBtdWx0aVNvcnRNZXRhLCBmaWx0ZXJEYXRhIH0gPSBldmVudDtcbiAgICAgICAgY29uc3QgcGFnZSA9IGZpcnN0IC8gcm93cztcbiAgICAgICAgY29uc3Qgc29ydDogU29ydE1ldGFbXSA9IG11bHRpU29ydE1ldGE7XG4gICAgICAgIGNvbnN0IHNvcnRGb3JtYXR0ZWQgPSAhIShzb3J0IHx8IFtdKS5sZW5ndGggJiYgeyBjYW1wbzogc29ydFswXS5maWVsZCwgb3JkZW5hY2FvOiBzb3J0WzBdLm9yZGVyID4gMCA/ICdBc2MnIDogJ0Rlc2MnIH07XG4gICAgICAgIGNvbnN0IGZpbHRlcklucHV0ID0gdGhpcy5nZXRQcm9kdXRvU2VhcmNoRmllbGRzKClcbiAgICAgICAgICAgIC5maWx0ZXIoKHsgbmFtZSB9KSA9PiBmaWx0ZXJEYXRhW25hbWVdICE9IHVuZGVmaW5lZCAmJiBmaWx0ZXJEYXRhW25hbWVdICE9IFwiXCIpXG4gICAgICAgICAgICAucmVkdWNlKChhLCB7IG5hbWUsIHR5cGUgfSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZmlsdGVyRGF0YVtuYW1lXTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gRmllbGRUeXBlLkludGVnZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgLi4uYSwgW25hbWVdOiBgJHt2YWx1ZX1gLnJlcGxhY2UoL1xcRC8sIFwiXCIpIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLmEsIFtuYW1lXTogdmFsdWUgfTtcbiAgICAgICAgICAgIH0sIHsgcGFnaW5hOiB7IGxpbWl0OiByb3dzLCBvZmZzZXQ6IHBhZ2UsIGxpc3RhT3JkZW5hY2FvOiBzb3J0Rm9ybWF0dGVkID8gWyB7IC4uLihzb3J0Rm9ybWF0dGVkKSB9IF0gOiBudWxsIH0gfSBhcyBQcm9kdXRvUGFyYW1zKTtcblxuICAgICAgICBjb25zdCBmaWxpYWwgPSB0aGlzLmZvcm1Hcm91cC5nZXQoXCJmaWxpYWxcIikudmFsdWU7XG4gICAgICAgIGNvbnN0IHRpcG9BZ2VuZGFtZW50byA9IHRoaXMuYWdlbmRhLnRpcG9BZ2VuZGFtZW50bztcblxuICAgICAgICB0aGlzLnByb2R1dG9TZXJ2aWNlLmxpc3RQcm9kdXRvcyh7XG4gICAgICAgICAgICAuLi5maWx0ZXJJbnB1dCxcbiAgICAgICAgICAgIGVtcHJlc2FJZDogISFmaWxpYWwgPyBmaWxpYWwuZW1wcmVzYS5pZCA6IG51bGwsXG4gICAgICAgICAgICBmaWxpYWxJZDogISFmaWxpYWwgPyBmaWxpYWwuaWQgOiBudWxsLFxuICAgICAgICAgICAgc2l0dWFjYW86ICdBVElWTycsXG4gICAgICAgICAgICB0aXBvQWdlbmRhbWVudG9JZDogISF0aXBvQWdlbmRhbWVudG8gPyB0aXBvQWdlbmRhbWVudG8uaWQgOiBudWxsXG4gICAgICAgIH0pXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5wcm9kdXRvU2VhcmNoVG90YWxSZWNvcmRzID0gcmVzLnF0ZFRvdGFsUmVnaXN0cm9zO1xuICAgICAgICAgICAgdGhpcy5wcm9kdXRvU2VhcmNoR3JpZERhdGEgPSByZXMucHJvZHV0b3MubWFwKFByb2R1dG8uZnJvbUR0byk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblNhZnJhTG9va3VwUmVxdWVzdCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIG9uTG9va3VwUmVxdWVzdCh0aGlzLnNhZnJhU2VhcmNoRmllbGRzLCB0aGlzLnNhZnJhTG9va3VwRGlzcGxheUZpZWxkcyxcbiAgICAgICAgICAgIHRoaXMuc2FmcmFBZHZhbmNlZERpc3BsYXlGaWVsZHMsIHRoaXMuc2FmcmFMb29rdXBTZXBhcmF0b3IsIHRoaXMuc2FmcmFTZXJ2aWNlLCB2YWx1ZSlcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgobGlzdDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zYWZyYUxvb2t1cFN1Z2dlc3Rpb25zID0gbGlzdC5jb250ZW50cztcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblNhZnJhU2VhcmNoUmVxdWVzdChldmVudDogYW55KSB7XG4gICAgICAgIG9uU2VhcmNoUmVxdWVzdCh0aGlzLnNhZnJhU2VhcmNoRmllbGRzLCB0aGlzLnNhZnJhTG9va3VwRGlzcGxheUZpZWxkcyxcbiAgICAgICAgICAgIHRoaXMuc2FmcmFBZHZhbmNlZERpc3BsYXlGaWVsZHMsIHRoaXMuc2FmcmFMb29rdXBTZXBhcmF0b3IsIHRoaXMuc2FmcmFTZXJ2aWNlLCBldmVudClcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgobGlzdDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zYWZyYVNlYXJjaEdyaWREYXRhID0gbGlzdC5jb250ZW50cztcbiAgICAgICAgICAgICAgICB0aGlzLnNhZnJhU2VhcmNoVG90YWxSZWNvcmRzID0gbGlzdC50b3RhbEVsZW1lbnRzO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uVHJhbnNwb3J0YWRvcmFMb29rdXBSZXF1ZXN0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgb25Mb29rdXBSZXF1ZXN0KHRoaXMudHJhbnNwb3J0YWRvcmFTZWFyY2hGaWVsZHMsIHRoaXMudHJhbnNwb3J0YWRvcmFMb29rdXBEaXNwbGF5RmllbGRzLCBcbiAgICAgICAgICAgIHRoaXMudHJhbnNwb3J0YWRvcmFBZHZhbmNlZERpc3BsYXlGaWVsZHMsIHRoaXMudHJhbnNwb3J0YWRvcmFMb29rdXBTZXBhcmF0b3IsIHRoaXMudHJhbnNwb3J0YWRvcmFTZXJ2aWNlLCB2YWx1ZSlcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgobGlzdDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc3BvcnRhZG9yYUxvb2t1cFN1Z2dlc3Rpb25zID0gbGlzdC5jb250ZW50cztcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblRyYW5zcG9ydGFkb3JhU2VhcmNoUmVxdWVzdChldmVudDogYW55KSB7XG4gICAgICAgIG9uU2VhcmNoUmVxdWVzdCh0aGlzLnRyYW5zcG9ydGFkb3JhU2VhcmNoRmllbGRzLCB0aGlzLnRyYW5zcG9ydGFkb3JhTG9va3VwRGlzcGxheUZpZWxkcywgXG4gICAgICAgICAgICB0aGlzLnRyYW5zcG9ydGFkb3JhQWR2YW5jZWREaXNwbGF5RmllbGRzLCB0aGlzLnRyYW5zcG9ydGFkb3JhTG9va3VwU2VwYXJhdG9yLCB0aGlzLnRyYW5zcG9ydGFkb3JhU2VydmljZSwgZXZlbnQpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGxpc3Q6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNwb3J0YWRvcmFTZWFyY2hHcmlkRGF0YSA9IGxpc3QuY29udGVudHM7XG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc3BvcnRhZG9yYVNlYXJjaFRvdGFsUmVjb3JkcyA9IGxpc3QudG90YWxFbGVtZW50cztcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRUcmFuc3BvcnRhZG9yYSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgY25waiA9IHZhbHVlLnJlcGxhY2UoL1xcLi9nLCAnJykucmVwbGFjZSgvXFwvL2csICcnKS5yZXBsYWNlKC9cXC0vZywgJycpO1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyUXVlcnkgPSBgcGVzc29hLmNwZkNucGogZXEgJyR7Y25wan0nYDtcbiAgICAgICAgICAgIHRoaXMudHJhbnNwb3J0YWRvcmFTZXJ2aWNlXG4gICAgICAgICAgICAgICAgLmxpc3QoeyBmaWx0ZXJRdWVyeSwgcGFnZTogMCwgc2l6ZTogMTAgfSlcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCh7IGNvbnRlbnRzIH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudHNbMF0ubGFiZWwgPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGdldExvb2t1cExhYmVsKGNvbnRlbnRzWzBdLCBbJ2NvZGlnbycsICdwZXNzb2Eubm9tZSddLCAnIC0gJywgdHJ1ZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KCd0cmFuc3BvcnRhZG9yYScpLnNldFZhbHVlKGNvbnRlbnRzWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uU2F2ZShzdGFydD86IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KCdhZ2VuZGEnKS5zZXRWYWx1ZSh0aGlzLmFnZW5kYSk7XG4gICAgICAgIFxuICAgICAgICBpZiAodGhpcy5mb3JtR3JvdXAuaW52YWxpZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVBbGxGb3JtRmllbGRzKHRoaXMuZm9ybUdyb3VwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgodGhpcy5mb3JtR3JvdXAuZ2V0KFwiZm9ybmVjZWRvcmVzXCIpIGFzIEZvcm1BcnJheSkubGVuZ3RoIDw9IDApIHtcbiAgICAgICAgICAgIHRoaXMuZXJyb0Zvcm5lY2Vkb3JlcyA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuXG4gICAgICAgIGlmICh0aGlzLmlzTmV3KCkgIHx8ICF0aGlzLmVuYWJsZVJldmFsaWRhdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2F2ZUFuZEluaXQoc3RhcnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5lcnBQcm9jZXNzRGF0YSA9IHRoaXMuZXJwUHJvY2Vzc1NlcnZpY2UuYnVpbGRlckVycFByb2Nlc3NEYXRhVmFsaWRhTm90YU5hT3JkZW1Db21wcmEodGhpcy5lcnBQcm9jZXNzRGF0YSwgdGhpcy5mb3JtR3JvdXApO1xuICAgICAgICB0aGlzLmVycFByb2Nlc3NTZXJ2aWNlLmNoYW5nZURhdGFFcnAodGhpcy5lcnBQcm9jZXNzRGF0YSk7XG4gICAgICAgIHJldHVybiB0aGlzLmFnZW5kYVNlcnZpY2VcbiAgICAgICAgLmNoZWNhclJldmFsaWRhY2FvKHRoaXMuZXJwUHJvY2Vzc0RhdGEpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksXG4gICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB0aGlzLmxvYWRpbmcgPSBmYWxzZSksXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnJlcXVlclJldmFsaWRhY2FvKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hdHVhbGl6YUFnZW5kYVBhcmFSZWplaXRhZG9Qb3JWYWxpZGFjYW8oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc2F2ZUFuZEluaXQoc3RhcnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGF0dWFsaXphQWdlbmRhUGFyYVJlamVpdGFkb1BvclZhbGlkYWNhbygpIHtcbiAgICAgICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlLmNvbmZpcm0oe1xuICAgICAgICAgICAgaGVhZGVyOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLnBhdGlvLmFnZW5kYV9yZXZhbGlkYWNhb190aXRsZVwiKSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMucGF0aW8uYWdlbmRhX3JldmFsaWRhY2FvX21lc3NhZ2VcIiksXG4gICAgICAgICAgICBhY2NlcHQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhc0NoYW5nZVNlcnZpY2UuaGFzQ2hhbmdlU2F2ZSh0aGlzLmFnZW5kYS5pZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5hZ2VuZGEuc3RhdHVzID0gU3RhdHVzQWdlbmRhLlJFSkVJVEFET19QT1JfVkFMSURBQ0FPO1xuICAgICAgICAgICAgICAgIHRoaXMuYWdlbmRhLm1vdG9yaXN0YSA9IHtpZDogdGhpcy5lcnBQcm9jZXNzRGF0YS5tb3RvcmlzdGFJZH07XG4gICAgICAgICAgICAgICAgdGhpcy5hZ2VuZGEudmVpY3VsbyA9IHtpZDogdGhpcy5lcnBQcm9jZXNzRGF0YS52ZWljdWxvSWR9O1xuICAgICAgICAgICAgICAgIHRoaXMuYWdlbmRhU2VydmljZVxuICAgICAgICAgICAgICAgICAgICAuYXR1YWxpemFyQWdlbmRhKHRoaXMuYWdlbmRhKVxuICAgICAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29uY2F0TWFwKChfKSA9PiB0aGlzLmdldFNhdmVPYnNlcnZhYmxlKCkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxpemUoKCkgPT4gdGhpcy5sb2FkaW5nID0gZmFsc2UpLFxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKF8pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3VjY2Vzc01lc3NhZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtcIi9jaGVnYWRhLXZlaWN1bG9cIl0sIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVqZWN0OiAoKSA9PiB0aGlzLmxvYWRpbmcgPSBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzYXZlQW5kSW5pdChzdGFydDogYm9vbGVhbikge1xuICAgICAgICB0aGlzLmdldFNhdmVPYnNlcnZhYmxlKClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLFxuICAgICAgICAgICAgICAgIGZpbmFsaXplKCgpID0+IHRoaXMubG9hZGluZyA9IGZhbHNlKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoXCJpZFwiKS5zZXRWYWx1ZSh2YWx1ZS5pZCB8fCBudWxsKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN1Y2Nlc3NNZXNzYWdlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5oYXNDaGFuZ2VTZXJ2aWNlLmhhc0NoYW5nZVNhdmUodGhpcy5hZ2VuZGEuaWQpO1xuICAgICAgICAgICAgICAgIGlmIChzdGFydCAmJiB0aGlzLnNhdmVBbmRJbml0QnV0dG9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2F2ZUFuZEluaXRCdXR0b24uY2xpY2soKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN1Y2Nlc3NNZXNzYWdlKCkge1xuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7XG4gICAgICAgICAgICBzZXZlcml0eTogXCJzdWNjZXNzXCIsXG4gICAgICAgICAgICBzdW1tYXJ5OiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwic2F2ZWRfbWVzc2FnZV90aXRsZVwiKSxcbiAgICAgICAgICAgIGRldGFpbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInNhdmVkX21lc3NhZ2VfY29udGVudFwiKSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGlzTmV3KCkge1xuICAgICAgICByZXR1cm4gIXRoaXMuZm9ybUdyb3VwLnZhbHVlLmlkO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRGb3JuZWNlZG9yKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgdGhpcy5lcnJvRm9ybmVjZWRvcmVzID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGZvcm5lY2Vkb3IgPSB0aGlzLmdldEZvcm5lY2Vkb3JGb3JtKGRhdGEpO1xuICAgICAgICB0aGlzLmdldEZvcm5lY2Vkb3Jlc0Zvcm0oKS5wdXNoKGZvcm5lY2Vkb3IpO1xuICAgICAgICByZXR1cm4gZm9ybmVjZWRvcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlRm9ybmVjZWRvcihjb250cm9sOiBGb3JtR3JvdXApIHtcbiAgICAgICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlLmNvbmZpcm0oe1xuICAgICAgICAgICAgaGVhZGVyOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5yZW1vdmVfZm9ybmVjZWRvcl9oZWFkZXJcIiksXG4gICAgICAgICAgICBtZXNzYWdlOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5yZW1vdmVfZm9ybmVjZWRvcl9tZXNzYWdlXCIpLFxuICAgICAgICAgICAgYWNjZXB0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmdldEZvcm5lY2Vkb3Jlc0Zvcm0oKS5jb250cm9scy5pbmRleE9mKGNvbnRyb2wpO1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0Rm9ybmVjZWRvcmVzRm9ybSgpLnJlbW92ZUF0KGluZGV4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEZvcm5lY2Vkb3JGb3JtKGRhdGE6IGFueSA9IHt9KSB7XG4gICAgICAgIGNvbnN0IGZvcm1Hcm91cCA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgICAgICAgZm9ybmVjZWRvcjogW2RhdGEuZm9ybmVjZWRvciwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICAgICAgICBvcmlnZW1NZXJjYWRvcmlhOiBbZGF0YS5vcmlnZW1NZXJjYWRvcmlhXSxcbiAgICAgICAgICAgIG9yZGVuczogdGhpcy5mb3JtQnVpbGRlci5hcnJheShbXSksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2VzKGZvcm1Hcm91cCwgXCJmb3JuZWNlZG9yXCIsIHRoaXMub25Gb3JuZWNlZG9yQ2hhbmdlKTtcblxuICAgICAgICBjb25zdCBnZXRGaWx0ZXJRdWVyeUZvcm5lY2Vkb3IgPSAodmFsdWU6IGFueSkgPT4gYHBlc3NvYS5pZCBlcSAnJHt2YWx1ZS5pZH0nYDtcbiAgICAgICAgdGhpcy5jaGVja1ZhbHVlc0NoYW5nZXMoXG4gICAgICAgICAgICBmb3JtR3JvdXAsIFwiZm9ybmVjZWRvclwiLCBcIm9yaWdlbU1lcmNhZG9yaWFcIiwgdGhpcy5vcmlnZW1NZXJjYWRvcmlhU2VydmljZSxcbiAgICAgICAgICAgIGdldEZpbHRlclF1ZXJ5Rm9ybmVjZWRvciwgWydjb2RpZ28nLCAnZW5kZXJlY28nXSwgKHZhbCkgPT4gUGVzc29hRW5kZXJlY28uZnJvbUR0byh2YWwpLCAxMCwgZmFsc2UsIHRydWVcbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gZm9ybUdyb3VwO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRGb3JuZWNlZG9yZXNGb3JtKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuZm9ybUdyb3VwLmdldChcImZvcm5lY2Vkb3Jlc1wiKSBhcyBGb3JtQXJyYXkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXROb3Rhcyhmb3JtR3JvdXA6IEZvcm1Hcm91cCkge1xuICAgICAgICByZXR1cm4gKGZvcm1Hcm91cC5nZXQoXCJub3Rhc1wiKSBhcyBGb3JtQXJyYXkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGROb3RhKGZvcm1Hcm91cDogRm9ybUdyb3VwKSB7XG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5vcGVuKE5vdGFGb3JtQ29tcG9uZW50LCB7XG4gICAgICAgICAgICBoZWFkZXI6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLmFkaWNpb25hcl9ub3RhXCIpLFxuICAgICAgICAgICAgLi4uZGlhbG9nQ29uZmlnLFxuICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgIGZvcm5lY2Vkb3I6IGZvcm1Hcm91cC5nZXQoXCJmb3JuZWNlZG9yXCIpLnZhbHVlLFxuICAgICAgICAgICAgICAgIHByb2R1dG86IHRoaXMuZm9ybUdyb3VwLmdldChcInByb2R1dG9cIikudmFsdWUsXG4gICAgICAgICAgICAgICAgZmlsaWFsOiB0aGlzLmZvcm1Hcm91cC5nZXQoXCJmaWxpYWxcIikudmFsdWUsXG4gICAgICAgICAgICAgICAgZm9ybmVjZWRvck5vdGFzVG9rZW5zOiB0aGlzLmZvcm5lY2Vkb3JOb3Rhc1Rva2VucyxcbiAgICAgICAgICAgICAgICBvcmRlbnM6IHRoaXMub3JkZW5zLFxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAub25DbG9zZVxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSwgZmlsdGVyKHZhbHVlID0+ICEhdmFsdWUpKVxuICAgICAgICAuc3Vic2NyaWJlKHZhbHVlID0+IHRoaXMub25Ob3RhU2F2ZWQodmFsdWUsIGZvcm1Hcm91cCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmVyTm90YShmb3JuZWNlZG9yRm9ybTogRm9ybUdyb3VwLCBvcmRlbUNvbXByYUZvcm06IEZvcm1Hcm91cCwgbm90YUZvcm06IEZvcm1Hcm91cCkge1xuICAgICAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybSh7XG4gICAgICAgICAgICBoZWFkZXI6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnJlbW92ZV9ub3RhX2hlYWRlclwiKSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnJlbW92ZV9ub3RhX21lc3NhZ2VcIiksXG4gICAgICAgICAgICBhY2NlcHQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBvcmRlbUNvbXByYUlkID0gb3JkZW1Db21wcmFGb3JtW1widmFsdWVcIl1bXCJvcmRlbUNvbXByYVwiXVtcImlkXCJdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5nZXROb3Rhc0Zyb21PcmRlbnMoZm9ybmVjZWRvckZvcm0sIG9yZGVtQ29tcHJhSWQpLmNvbnRyb2xzLmluZGV4T2Yobm90YUZvcm0pO1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0Tm90YXNGcm9tT3JkZW5zKGZvcm5lY2Vkb3JGb3JtLCBvcmRlbUNvbXByYUlkKS5yZW1vdmVBdChpbmRleCk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBub3RhID0gbm90YUZvcm1bXCJ2YWx1ZVwiXTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm5lY2Vkb3JOb3Rhc1Rva2Vucy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IG5vdGEuY2hhdmVOb3RhRmlzY2FsLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogbm90YS5udW1lcm9Ob3RhRmlzY2FsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JuZWNlZG9yTm90YXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGNoYXZlTm90YUZpc2NhbDogbm90YS5jaGF2ZU5vdGFGaXNjYWwsXG4gICAgICAgICAgICAgICAgICAgIHNlcmllTm90YUZpc2NhbDogbm90YS5zZXJpZU5vdGFGaXNjYWwsXG4gICAgICAgICAgICAgICAgICAgIHNlcmllTGVnYWxOb3RhRmlzY2FsOiBub3RhLnNlcmllTGVnYWxOb3RhRmlzY2FsLFxuICAgICAgICAgICAgICAgICAgICBudW1lcm9Ob3RhRmlzY2FsOiBub3RhLm51bWVyb05vdGFGaXNjYWwsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBzaG93QnV0dG9ucygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmFnZW5kYSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIFN0YXR1c0FnZW5kYS5BR0VOREFETyxcbiAgICAgICAgICAgIFN0YXR1c0FnZW5kYS5BR1VBUkRBTkRPX0NPTkZJUk1BQ0FPLFxuICAgICAgICAgICAgU3RhdHVzQWdlbmRhLkFHVUFSREFORE9fQ09ORklSTUFDQU9fU09MSUNJVEFOVEUsXG4gICAgICAgICAgICBTdGF0dXNBZ2VuZGEuUkVKRUlUQURPX1BPUl9WQUxJREFDQU9cbiAgICAgICAgXS5pbmNsdWRlcyh0aGlzLmFnZW5kYS5zdGF0dXMgYXMgU3RhdHVzQWdlbmRhKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZGlzYWJsZUFkaWNpb25hck5vdGEoKSB7XG4gICAgICAgIGlmICh0aGlzLm9yZGVtQ29tcHJhU2VsZWNpb25hZG8gPT09IG51bGwgfHwgdGhpcy5vcmRlbUNvbXByYVNlbGVjaW9uYWRvID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3Zlck9yZGVtQ29tcHJhKGZvcm5lY2Vkb3JGb3JtOiBGb3JtR3JvdXAsIG9yZGVtQ29tcHJhRm9ybTogRm9ybUdyb3VwKSB7XG4gICAgICAgIHRoaXMuY29uZmlybWF0aW9uU2VydmljZS5jb25maXJtKHtcbiAgICAgICAgICAgIGhlYWRlcjogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucmVtb3ZlX29yZGVtX2NvbXByYV9oZWFkZXJcIiksXG4gICAgICAgICAgICBtZXNzYWdlOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5yZW1vdmVfb3JkZW1fY29tcHJhX21lc3NhZ2VcIiksXG4gICAgICAgICAgICBhY2NlcHQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBvcmRlbnNDb21wcmFGb3JtID0gdGhpcy5nZXRPcmRlbnNDb21wcmEoZm9ybmVjZWRvckZvcm0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gb3JkZW5zQ29tcHJhRm9ybS5jb250cm9scy5pbmRleE9mKG9yZGVtQ29tcHJhRm9ybSk7XG4gICAgICAgICAgICAgICAgb3JkZW5zQ29tcHJhRm9ybS5yZW1vdmVBdChpbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25PcmRlbUNvbXByYVNhdmVkKG9yZGVtQ29tcHJhOiBhbnksIGZvcm5lY2Vkb3JGb3JtOiBGb3JtR3JvdXApIHtcbiAgICAgICAgY29uc3Qgb3JkZW1Db21wcmFGb3JtID0gdGhpcy5nZXRPcmRlbUNvbXByYUZvcm0oeyBvcmRlbUNvbXByYSA6IG9yZGVtQ29tcHJhIH0pO1xuICAgICAgICB0aGlzLmdldE9yZGVuc0NvbXByYShmb3JuZWNlZG9yRm9ybSkucHVzaChvcmRlbUNvbXByYUZvcm0pO1xuICAgICAgICB0aGlzLmdldEZvcm5lY2Vkb3JCeU9yZGVtQ29tcHJhKG9yZGVtQ29tcHJhLCBmb3JuZWNlZG9yRm9ybSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRGb3JuZWNlZG9yQnlPcmRlbUNvbXByYShvcmRlbUNvbXByYTogT3JkZW1Db21wcmFEdG8sIGZvcm5lY2Vkb3JGb3JtOiBGb3JtR3JvdXApIHtcbiAgICAgICAgdGhpcy5wZXNzb2FTZXJ2aWNlLmxpc3QoeyBzaXplOiAxLCBwYWdlOiAwLCBmaWx0ZXJRdWVyeTogYGlkIGVxICcke29yZGVtQ29tcHJhLnBlc3NvYS5pZH0nYCB9KVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksXG4gICAgICAgICAgICAgICAgbWFwKCh7IGNvbnRlbnRzIH0pID0+IChjb250ZW50cyB8fCBbXSkubGVuZ3RoICYmIGNvbnRlbnRzWzBdKSxcbiAgICAgICAgICAgICAgICBmaWx0ZXIodmFsdWUgPT4gISF2YWx1ZSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUocGVzc29hID0+IHtcbiAgICAgICAgICAgICAgICBmb3JuZWNlZG9yRm9ybS5nZXQoXCJmb3JuZWNlZG9yXCIpLnNldFZhbHVlKFBlc3NvYS5mcm9tRHRvKHBlc3NvYSkpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0T3JkZW5zQ29tcHJhKGZvcm5lY2Vkb3JGb3JtOiBGb3JtR3JvdXApIHtcbiAgICAgICAgdGhpcy5vcmRlbnMgPSBmb3JuZWNlZG9yRm9ybS5nZXQoXCJvcmRlbnNcIik7XG4gICAgICAgIHJldHVybiBmb3JuZWNlZG9yRm9ybS5nZXQoXCJvcmRlbnNcIikgYXMgRm9ybUFycmF5O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXROb3Rhc0Zyb21PcmRlbnMoZm9ybmVjZWRvckZvcm06IEFic3RyYWN0Q29udHJvbCwgb3JkZW1Db21wcmFJZDogYW55KSB7XG4gICAgICAgIGxldCBvcmRlbnNGb3JtU2VsZWNpb25hZG8gPSBudWxsO1xuICAgICAgICBjb25zdCBvcmRlbnNDb21wcmFGb3JtID0gZm9ybmVjZWRvckZvcm1bXCJjb250cm9sc1wiXVtcIm9yZGVuc1wiXVtcImNvbnRyb2xzXCJdO1xuXG4gICAgICAgIGZvciAobGV0IG9yZGVtQ29tcHJhRm9ybSBvZiBvcmRlbnNDb21wcmFGb3JtKSB7XG4gICAgICAgICAgICBpZiAob3JkZW1Db21wcmFGb3JtW1wiY29udHJvbHNcIl1bXCJvcmRlbUNvbXByYVwiXVtcInZhbHVlXCJdLmlkID09PSBvcmRlbUNvbXByYUlkKSB7XG4gICAgICAgICAgICAgICAgb3JkZW5zRm9ybVNlbGVjaW9uYWRvID0gb3JkZW1Db21wcmFGb3JtW1wiY29udHJvbHNcIl1bXCJub3Rhc1wiXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvcmRlbnNGb3JtU2VsZWNpb25hZG8gYXMgRm9ybUFycmF5O1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRGb3JuZWNlZG9yTm90YXNUb2tlbkVtT3JkZW1Db21wcmEoZm9ybmVjZWRvckZvcm06IEZvcm1Hcm91cCwgdG9rZW46IElUb2tlbikge1xuICAgICAgICBpZiAodGhpcy5vcmRlbUNvbXByYVNlbGVjaW9uYWRvID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLm1lbnNhZ2VtT3JkZW1Db21wcmFOYW9TZWxlY2lvbmFkbygpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgbm90YXMgPSB0aGlzLmZvcm5lY2Vkb3JOb3Rhcy5maWx0ZXIoZm9ybmVjZWRvck5vdGEgPT4gZm9ybmVjZWRvck5vdGEuY2hhdmVOb3RhRmlzY2FsID09PSB0b2tlbi5pZCk7XG4gICAgICAgIGNvbnN0IG5vdGFzRm9ybSA9IHRoaXMuZ2V0Tm90YXNGcm9tT3JkZW5zKGZvcm5lY2Vkb3JGb3JtLCB0aGlzLm9yZGVtQ29tcHJhU2VsZWNpb25hZG8uaWQpO1xuICAgICAgICBpZiAobm90YXNGb3JtICE9PSBudWxsICYmIG5vdGFzWzBdICE9PSBudWxsKSB7XG4gICAgICAgICAgICBub3Rhc0Zvcm0ucHVzaCh0aGlzLmdldE5vdGFGb3JtKG5vdGFzWzBdKSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlbW92ZUZvcm5lY2Vkb3JOb3Rhc1Rva2VuRGFPcmRlbUNvbXByYSh0b2tlbik7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZUZvcm5lY2Vkb3JOb3Rhc1Rva2VuRGFPcmRlbUNvbXByYSh0b2tlbjogSVRva2VuKSB7XG4gICAgICAgIHRoaXMuZm9ybmVjZWRvck5vdGFzVG9rZW5zLnNwbGljZSh0aGlzLmZvcm5lY2Vkb3JOb3Rhc1Rva2Vucy5pbmRleE9mKHRva2VuKSwgMSk7XG4gICAgICAgIHRoaXMuZm9ybmVjZWRvck5vdGFzID0gdGhpcy5mb3JuZWNlZG9yTm90YXMuZmlsdGVyKGZvcm5lY2Vkb3JOb3RhID0+IGZvcm5lY2Vkb3JOb3RhLmNoYXZlTm90YUZpc2NhbCAhPT0gdG9rZW4uaWQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0T3JkZW1Db21wcmFGb3JtKGRhdGE6IGFueSA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgICAgICAgIG9yZGVtQ29tcHJhOiBbZGF0YS5vcmRlbUNvbXByYSwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICAgICAgICBub3RhczogdGhpcy5mb3JtQnVpbGRlci5hcnJheShbXSksXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Tm90YUZvcm0oZGF0YTogYW55ID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgICAgICAgY2hhdmVOb3RhRmlzY2FsOiBbZGF0YS5jaGF2ZU5vdGFGaXNjYWxdLFxuICAgICAgICAgICAgc2VyaWVOb3RhRmlzY2FsOiBbZGF0YS5zZXJpZU5vdGFGaXNjYWxdLFxuICAgICAgICAgICAgc2VyaWVMZWdhbE5vdGFGaXNjYWw6IFtkYXRhLnNlcmllTGVnYWxOb3RhRmlzY2FsXSxcbiAgICAgICAgICAgIG51bWVyb05vdGFGaXNjYWw6IFtkYXRhLm51bWVyb05vdGFGaXNjYWxdLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG1lbnNhZ2VtT3JkZW1Db21wcmFOYW9TZWxlY2lvbmFkbygpIHtcbiAgICAgICAgdGhpcy5hZGRNZXNzYWdlKFwiZXJyb3JcIiwgXCJPcmRlbSBkZSBjb21wcmEgbsOjbyBzZWxlY2lvbmFkb1wiLCBcIk5lbmh1bSBvcmRlbSBkZSBjb21wcmEgZm9pIHNlbGVjaW9uYWRvIVwiKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uTm90YVNhdmVkKHZhbHVlOiBhbnksIGZvcm5lY2Vkb3JGb3JtOiBGb3JtR3JvdXApIHtcbiAgICAgICAgaWYgKHRoaXMub3JkZW1Db21wcmFTZWxlY2lvbmFkbyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5tZW5zYWdlbU9yZGVtQ29tcHJhTmFvU2VsZWNpb25hZG8oKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdmFsdWUuYWRkRm9ybmVjZWRvcikge1xuICAgICAgICAgICAgY29uc3Qgbm90YXNGb3JtID0gdGhpcy5nZXROb3Rhc0Zyb21PcmRlbnMoZm9ybmVjZWRvckZvcm0sIHRoaXMub3JkZW1Db21wcmFTZWxlY2lvbmFkby5pZCk7XG4gICAgICAgICAgICBpZiAobm90YXNGb3JtICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgbm90YXNGb3JtLnB1c2godGhpcy5nZXROb3RhRm9ybSh2YWx1ZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZXhpc3RzRm9ybmVjZWRvciA9ICh0aGlzLmZvcm1Hcm91cC5nZXQoXCJmb3JuZWNlZG9yZXNcIikgYXMgRm9ybUFycmF5KS5jb250cm9scy5maW5kKChmb3JtKSA9PiAoZm9ybS52YWx1ZS5mb3JuZWNlZG9yIHx8IHtpZDogdW5kZWZpbmVkfSkuaWQgPT09IHZhbHVlLmZvcm5lY2Vkb3IuaWQpO1xuICAgICAgICBjb25zdCB7IGluZm9Ob3RhIH0gPSB2YWx1ZTtcbiAgICAgICAgY29uc3Qgbm90YUZvcm0gPSB0aGlzLmdldE5vdGFGb3JtKHsgXG4gICAgICAgICAgICBjaGF2ZU5vdGFGaXNjYWw6IGluZm9Ob3RhLmNoYXZlLFxuICAgICAgICAgICAgc2VyaWVOb3RhRmlzY2FsOiBpbmZvTm90YS5zZXJpZSxcbiAgICAgICAgICAgIHNlcmllTGVnYWxOb3RhRmlzY2FsOiBpbmZvTm90YS5zZXJpZUxlZ2FsLFxuICAgICAgICAgICAgbnVtZXJvTm90YUZpc2NhbDogaW5mb05vdGEubnVtZXJvLFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoISFleGlzdHNGb3JuZWNlZG9yKSB7XG4gICAgICAgICAgICBjb25zdCBub3Rhc0Zvcm0gPSB0aGlzLmdldE5vdGFzRnJvbU9yZGVucyhleGlzdHNGb3JuZWNlZG9yLCB0aGlzLm9yZGVtQ29tcHJhU2VsZWNpb25hZG8uaWQpO1xuICAgICAgICAgICAgbm90YXNGb3JtLnB1c2gobm90YUZvcm0pO1xuICAgICAgICAgICAgdGhpcy5kaXNhYmxlRmllbGRzKGV4aXN0c0Zvcm5lY2Vkb3IsIFwiZm9ybmVjZWRvclwiLCBcIm9yaWdlbU1lcmNhZG9yaWFcIik7XG4gICAgICAgIH0gZWxzZSBpZiAoIWZvcm5lY2Vkb3JGb3JtLmdldChcImZvcm5lY2Vkb3JcIikudmFsdWUpIHtcbiAgICAgICAgICAgIGZvcm5lY2Vkb3JGb3JtLmdldChcImZvcm5lY2Vkb3JcIikuc2V0VmFsdWUoUGVzc29hLmZyb21EdG8odmFsdWUuZm9ybmVjZWRvcikpO1xuICAgICAgICAgICAgZm9ybmVjZWRvckZvcm0uZ2V0KFwib3JpZ2VtTWVyY2Fkb3JpYVwiKS5zZXRWYWx1ZShQZXNzb2FFbmRlcmVjby5mcm9tRHRvKHZhbHVlLm9yaWdlbU1lcmNhZG9yaWEpKTtcbiAgICAgICAgICAgIGNvbnN0IG5vdGFzRm9ybSA9IHRoaXMuZ2V0Tm90YXNGcm9tT3JkZW5zKGZvcm5lY2Vkb3JGb3JtLCB0aGlzLm9yZGVtQ29tcHJhU2VsZWNpb25hZG8uaWQpO1xuICAgICAgICAgICAgbm90YXNGb3JtLnB1c2gobm90YUZvcm0pO1xuICAgICAgICAgICAgdGhpcy5kaXNhYmxlRmllbGRzKGZvcm5lY2Vkb3JGb3JtLCBcImZvcm5lY2Vkb3JcIiwgXCJvcmlnZW1NZXJjYWRvcmlhXCIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZm9ybmVjZWRvciA9IHRoaXMuYWRkRm9ybmVjZWRvcih7IGZvcm5lY2Vkb3I6IFBlc3NvYS5mcm9tRHRvKHZhbHVlLmZvcm5lY2Vkb3IpLCBvcmlnZW1NZXJjYWRvcmlhOiBQZXNzb2FFbmRlcmVjby5mcm9tRHRvKHZhbHVlLm9yaWdlbU1lcmNhZG9yaWEpIH0pO1xuICAgICAgICAgICAgY29uc3Qgbm90YXNGb3JtID0gdGhpcy5nZXROb3Rhc0Zyb21PcmRlbnMoZm9ybmVjZWRvciwgdGhpcy5vcmRlbUNvbXByYVNlbGVjaW9uYWRvLmlkKTtcbiAgICAgICAgICAgIG5vdGFzRm9ybS5wdXNoKG5vdGFGb3JtKTtcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZUZpZWxkcyhmb3JuZWNlZG9yLCBcImZvcm5lY2Vkb3JcIiwgXCJvcmlnZW1NZXJjYWRvcmlhXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRNZXNzYWdlKHNldmVyaXR5OiBzdHJpbmcsIHN1bW1hcnk6IHN0cmluZywgZGV0YWlsOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoe1xuICAgICAgICAgICAgc2V2ZXJpdHksXG4gICAgICAgICAgICBzdW1tYXJ5OiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KHN1bW1hcnkpLFxuICAgICAgICAgICAgZGV0YWlsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGRldGFpbCksXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U2F2ZU9ic2VydmFibGUoKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5mb3JtR3JvdXAuZ2V0UmF3VmFsdWUoKTtcbiAgICAgICAgdmFsdWUuZW1wcmVzYSA9IHZhbHVlLmZpbGlhbC5lbXByZXNhO1xuICAgICAgICBjb25zdCByZWNlYmltZW50b0R0byA9IFJlY2ViaW1lbnRvT3JkZW1Db21wcmEudG9EdG8odmFsdWUpO1xuXG4gICAgICAgIGxldCBmb3JuZWNlZG9yZXM6IGFueVtdID0gcmVjZWJpbWVudG9EdG8uZm9ybmVjZWRvcmVzO1xuICAgICAgICByZWNlYmltZW50b0R0by5mb3JuZWNlZG9yZXMuZm9yRWFjaChhbnRlcmlvciA9PiB7XG4gICAgICAgICAgICByZWNlYmltZW50b0R0by5mb3JuZWNlZG9yZXMuZm9yRWFjaChwb3N0ZXJpb3IgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChhbnRlcmlvci5mb3JuZWNlZG9yLmlkID09PSBwb3N0ZXJpb3IuZm9ybmVjZWRvci5pZCAmJlxuICAgICAgICAgICAgICAgICAgICBhbnRlcmlvci5vcmlnZW1NZXJjYWRvcmlhLmlkID09PSBwb3N0ZXJpb3Iub3JpZ2VtTWVyY2Fkb3JpYS5pZCkge1xuICAgICAgICAgICAgICAgICAgICBmb3JuZWNlZG9yZXMgPSBmb3JuZWNlZG9yZXMuc3BsaWNlKGZvcm5lY2Vkb3Jlcy5pbmRleE9mKHBvc3RlcmlvciksIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmVjZWJpbWVudG9EdG8uZm9ybmVjZWRvcmVzID0gZm9ybmVjZWRvcmVzO1xuXG5cbiAgICAgICAgaWYgKHRoaXMuaXNOZXcoKSAmJiAhdmFsdWUuaWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlY2ViaW1lbnRvT3JkZW1Db21wcmFTZXJ2aWNlLmluc2VydChyZWNlYmltZW50b0R0byk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZWNlYmltZW50b09yZGVtQ29tcHJhU2VydmljZS51cGRhdGUodGhpcy5mb3JtR3JvdXAudmFsdWUuaWQsIHJlY2ViaW1lbnRvRHRvKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Rm9ybUdyb3VwKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICAgICAgICBpZDogW3VuZGVmaW5lZF0sXG4gICAgICAgICAgICBmaWxpYWw6IFt7IHZhbHVlOiB1bmRlZmluZWQsIGRpc2FibGVkOiBmYWxzZSB9LCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgICAgICAgIGZvcm5lY2Vkb3JlczogdGhpcy5mb3JtQnVpbGRlci5hcnJheShbXSksXG4gICAgICAgICAgICBwcm9kdXRvOiBbeyB2YWx1ZTogdW5kZWZpbmVkLCBkaXNhYmxlZDogdHJ1ZSB9XSxcbiAgICAgICAgICAgIGRlcml2YWNhbzogW3sgdmFsdWU6IHVuZGVmaW5lZCwgZGlzYWJsZWQ6IHRydWUgfV0sXG4gICAgICAgICAgICB0cmFuc3BvcnRhZG9yYTogW3VuZGVmaW5lZF0sXG4gICAgICAgICAgICBzYWZyYTogW3VuZGVmaW5lZF0sXG4gICAgICAgICAgICBhZ2VuZGE6IFt7IHZhbHVlOiB1bmRlZmluZWQsIGRpc2FibGVkOiB0cnVlIH0sIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHZhbGlkYXRlQWxsRm9ybUZpZWxkcyhmb3JtR3JvdXA6IEZvcm1Hcm91cCkge1xuICAgICAgICBPYmplY3Qua2V5cyhmb3JtR3JvdXAuY29udHJvbHMpLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29udHJvbCA9IGZvcm1Hcm91cC5nZXQoZmllbGQpO1xuICAgICAgICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQ29udHJvbCkge1xuICAgICAgICAgICAgIGNvbnRyb2wubWFya0FzRGlydHkoeyBvbmx5U2VsZjogdHJ1ZSB9KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1Hcm91cCl7IFxuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGVBbGxGb3JtRmllbGRzKGNvbnRyb2wpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUFycmF5KSB7XG4gICAgICAgICAgICAgICAgY29udHJvbC5jb250cm9scy5mb3JFYWNoKChmb3JtOiBGb3JtR3JvdXApID0+IHRoaXMudmFsaWRhdGVBbGxGb3JtRmllbGRzKGZvcm0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGROb3ZhTm90YShyZXNwb25zZTogUGVzcXVpc2FyRG9jdW1lbnRvUmVzcG9uc2UpIHtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gKHJlc3BvbnNlLmRvY3VtZW50b3MgfHwgW10pLmxlbmd0aCA/IHJlc3BvbnNlLmRvY3VtZW50b3NbMF0gOiB1bmRlZmluZWQ7XG4gICAgICAgIGlmICghdmFsdWVzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmb3JuZWNlZG9yID0gUGVzc29hLmZyb21EdG8odmFsdWVzLmZvcm5lY2Vkb3IpO1xuICAgICAgICBjb25zdCBvcmlnZW1NZXJjYWRvcmlhID0gUGVzc29hRW5kZXJlY28uZnJvbUR0byh2YWx1ZXMub3JpZ2VtTWVyY2Fkb3JpYSk7XG5cbiAgICAgICAgY29uc3QgZm9ybmVjZWRvckZvcm0gPSB0aGlzLmdldEZvcm5lY2Vkb3Jlc0Zvcm0oKS5jb250cm9scy5maW5kKCh7IHZhbHVlIH0pID0+IHZhbHVlLmZvcm5lY2Vkb3IuaWQgPT09IGZvcm5lY2Vkb3IuaWQpIGFzIEZvcm1Hcm91cDtcbiAgICAgICAgaWYgKCFmb3JuZWNlZG9yRm9ybSkge1xuICAgICAgICAgICAgdGhpcy5hZGRGb3JuZWNlZG9yKHsgZm9ybmVjZWRvciwgb3JpZ2VtTWVyY2Fkb3JpYSB9KTtcbiAgICAgICAgICAgIHRoaXMuYWRkRm9ybmVjZWRvck5vdGFzVG9rZW4odmFsdWVzKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYWRkRm9ybmVjZWRvck5vdGFzVG9rZW4odmFsdWVzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZEZvcm5lY2Vkb3JOb3Rhc1Rva2VuKHZhbHVlOiBhbnkpIHtcbiAgICAgICAgdGhpcy5mb3JuZWNlZG9yTm90YXNUb2tlbnMucHVzaCh7XG4gICAgICAgICAgICBpZDogdGhpcy5jaGF2ZU5vdGFGaXNjYWwsXG4gICAgICAgICAgICBsYWJlbDogdmFsdWUubnVtZXJvXG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgdGhpcy5mb3JuZWNlZG9yTm90YXMucHVzaCh7XG4gICAgICAgICAgICBjaGF2ZU5vdGFGaXNjYWw6IHRoaXMuY2hhdmVOb3RhRmlzY2FsLFxuICAgICAgICAgICAgc2VyaWVOb3RhRmlzY2FsOiB2YWx1ZS5zZXJpZSxcbiAgICAgICAgICAgIHNlcmllTGVnYWxOb3RhRmlzY2FsOiB2YWx1ZS5zZXJpZUxlZ2FsLFxuICAgICAgICAgICAgbnVtZXJvTm90YUZpc2NhbDogdmFsdWUubnVtZXJvLFxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmNoYXZlTm90YUZpc2NhbCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW1vdmVOb3RhRXJyb3IoKSB7XG4gICAgICAgIHRoaXMuZXJyb0NoYXZlTm90YSA9IGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRkTm90YUVycm9yKCkge1xuICAgICAgICB0aGlzLmVycm9DaGF2ZU5vdGEgPSB0cnVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgbWVuc2FnZW1CdXNjYW5kb05vdGEoKSB7XG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHtcbiAgICAgICAgICAgIHNldmVyaXR5OiAnaW5mbycsXG4gICAgICAgICAgICBzdW1tYXJ5OiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5ub3RhX3NlYXJjaF9zdW1tYXJ5XCIpLFxuICAgICAgICAgICAgZGV0YWlsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5ub3RhX3NlYXJjaF9kZXRhaWxcIiksXG4gICAgICAgICAgICBsaWZlOiA1MDAwXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZGlzYWJsZUZpZWxkcyhmb3JtR3JvdXA6IEFic3RyYWN0Q29udHJvbCwgLi4ua2V5czogc3RyaW5nW10pIHtcbiAgICAgICAga2V5cy5mb3JFYWNoKGtleSA9PiBmb3JtR3JvdXAuZ2V0KGtleSkuZGlzYWJsZSgpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldERlcml2YWNhb1NlYXJjaEZpZWxkcygpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiZGVzY3JpY2FvXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAuZGVyaXZhY2FvX2Rlc2NyaWNhb1wiKVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImNvZGlnb1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLmRlcml2YWNhb19jb2RpZ29cIilcbiAgICAgICAgICAgIH0pLFxuICAgICAgICBdO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RmlsaWFsU2VhcmNoRmllbGRzKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJub21lXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAuZmlsaWFsX25vbWVcIilcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJjb2RpZ29cIixcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuSW50ZWdlcixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAuZmlsaWFsX2NvZGlnb1wiKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEZpbGlhbFNlYXJjaEdyaWRGaWVsZHMoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcIm5vbWVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5maWxpYWxfbm9tZVwiKVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImNvZGlnb1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5JbnRlZ2VyLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5maWxpYWxfY29kaWdvXCIpXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiZW1wcmVzYS5ub21lXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAuZW1wcmVzYVwiKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEZvcm5lY2Vkb3JTZWFyY2hGaWVsZHMoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcIm5vbWVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5wZXNzb2Ffbm9tZVwiKVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImNvZGlnb1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5JbnRlZ2VyLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5wZXNzb2FfY29kaWdvXCIpXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiY3BmQ25walwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnBlc3NvYV9jcGZDbnBqXCIpXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE9yaWdlbU1lcmNhZG9yaWFTZWFyY2hGaWVsZHMoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImNvZGlnb1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5JbnRlZ2VyLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5wZXNzb2FfZW5kZXJlY29fY29kaWdvXCIpXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwibnVtZXJvXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucGVzc29hX2VuZGVyZWNvX251bWVyb1wiKVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImVuZGVyZWNvXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucGVzc29hX2VuZGVyZWNvX2VuZGVyZWNvXCIpXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFByb2R1dG9TZWFyY2hGaWVsZHMoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImRlc2NyaWNhb1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnByb2R1dG9fZGVzY3JpY2FvXCIpXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiY29kaWdvXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucHJvZHV0b19jb2RpZ29cIilcbiAgICAgICAgICAgIH0pLFxuICAgICAgICBdO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U2FmcmFTZWFyY2hGaWVsZHMoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImNvZGlnb1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnNhZnJhX2NvZGlnb1wiKVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImRlc2NyaWNhb1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnNhZnJhX2Rlc2NyaWNhb1wiKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFNhZnJhU2VhcmNoR3JpZEZpZWxkcygpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiY29kaWdvXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAuc2FmcmFfY29kaWdvXCIpXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiZGVzY3JpY2FvXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAuc2FmcmFfZGVzY3JpY2FvXCIpXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiZW1wcmVzYS5ub21lXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAuc2FmcmFfZW1wcmVzYVwiKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFRyYW5zcG9ydGFkb3JhU2VhcmNoRmllbGRzKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJjb2RpZ29cIixcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuSW50ZWdlcixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAudHJhbnNwb3J0YWRvcmFfY29kaWdvXCIpXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwicGVzc29hLm5vbWVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC50cmFuc3BvcnRhZG9yYV9kZXNjcmljYW9cIilcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJwZXNzb2EuY3BmQ25walwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnRyYW5zcG9ydGFkb3JhX2NucGpcIilcbiAgICAgICAgICAgIH0pXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRUcmFuc3BvcnRhZG9yYVNlYXJjaEdyaWRGaWVsZHMoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImNvZGlnb1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5JbnRlZ2VyLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC50cmFuc3BvcnRhZG9yYV9jb2RpZ29cIilcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJwZXNzb2Eubm9tZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5JbnRlZ2VyLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5wZXNzb2Ffbm9tZVwiKVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcInBlc3NvYS5jcGZDbnBqXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAudHJhbnNwb3J0YWRvcmFfY25walwiKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE9yZGVtQ29tcHJhRmllbGRzKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJjb2RpZ29cIixcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5vcmRlbV9jb21wcmFfY29kaWdvXCIpXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiZW1wcmVzYS5ub21lXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAuZW1wcmVzYVwiKVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImZpbGlhbC5ub21lXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAuZmlsaWFsXCIpXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE9yZGVtQ29tcHJhR3JpZEZpZWxkcygpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiY29kaWdvXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLkludGVnZXIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLm9yZGVtX2NvbXByYV9jb2RpZ29cIilcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJlbXByZXNhLm5vbWVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5lbXByZXNhXCIpXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiZmlsaWFsLm5vbWVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5maWxpYWxcIilcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJwZXNzb2Eubm9tZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnBlc3NvYV9ub21lXCIpXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uQ2hhbmdlUmV2YWxpZGF0aW9uID0gKF8pID0+IHtcbiAgICAgICAgaWYgKHRoaXMuZXJwUHJvY2Vzc0RhdGEgJiYgdGhpcy5mb3JtR3JvdXApIHtcbiAgICAgICAgICAgIHRoaXMuZXJwUHJvY2Vzc0RhdGEgPSB0aGlzLmVycFByb2Nlc3NTZXJ2aWNlLmJ1aWxkZXJFcnBQcm9jZXNzRGF0YSh0aGlzLmVycFByb2Nlc3NEYXRhLCB0aGlzLmZvcm1Hcm91cCk7XG4gICAgICAgICAgICB0aGlzLmVycFByb2Nlc3NTZXJ2aWNlLmNoYW5nZURhdGEodGhpcy5lcnBQcm9jZXNzRGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxufVxuIl19