@testgorilla/tgo-coding-test 1.0.0 → 2.0.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.
Files changed (102) hide show
  1. package/fesm2022/testgorilla-tgo-coding-test.mjs +94 -94
  2. package/fesm2022/testgorilla-tgo-coding-test.mjs.map +1 -1
  3. package/lib/components/configurations/configurations.component.d.ts +1 -1
  4. package/package.json +15 -17
  5. package/esm2022/index.mjs +0 -12
  6. package/esm2022/lib/components/code-editor/code-editor.component.mjs +0 -335
  7. package/esm2022/lib/components/code-editor/code-editor.service.mjs +0 -72
  8. package/esm2022/lib/components/code-editor/helpers/c-helper.mjs +0 -40
  9. package/esm2022/lib/components/code-editor/helpers/code-editor-helper.base.mjs +0 -11
  10. package/esm2022/lib/components/code-editor/helpers/code-editor-helper.model.mjs +0 -2
  11. package/esm2022/lib/components/code-editor/helpers/cpp-helper.mjs +0 -41
  12. package/esm2022/lib/components/code-editor/helpers/csharp-helper.mjs +0 -42
  13. package/esm2022/lib/components/code-editor/helpers/go-helper.mjs +0 -42
  14. package/esm2022/lib/components/code-editor/helpers/index.mjs +0 -16
  15. package/esm2022/lib/components/code-editor/helpers/java-helper.mjs +0 -42
  16. package/esm2022/lib/components/code-editor/helpers/javascript-helper.mjs +0 -26
  17. package/esm2022/lib/components/code-editor/helpers/kotlin-helper.mjs +0 -42
  18. package/esm2022/lib/components/code-editor/helpers/php-helper.mjs +0 -26
  19. package/esm2022/lib/components/code-editor/helpers/python-helper.mjs +0 -26
  20. package/esm2022/lib/components/code-editor/helpers/r-helper.mjs +0 -26
  21. package/esm2022/lib/components/code-editor/helpers/ruby-helper.mjs +0 -26
  22. package/esm2022/lib/components/code-editor/helpers/scala-helper.mjs +0 -41
  23. package/esm2022/lib/components/code-editor/helpers/sql-helper.mjs +0 -34
  24. package/esm2022/lib/components/code-editor/helpers/swift-helper.mjs +0 -40
  25. package/esm2022/lib/components/code-editor/helpers/typescript-helper.mjs +0 -41
  26. package/esm2022/lib/components/code-editor/models/code-editor.model.mjs +0 -2
  27. package/esm2022/lib/components/code-editor/models/coding-snapshot.model.mjs +0 -2
  28. package/esm2022/lib/components/coding-question/coding-question.component.mjs +0 -126
  29. package/esm2022/lib/components/coding-section/coding-section.component.mjs +0 -188
  30. package/esm2022/lib/components/common/truncated-text/truncated-text.component.mjs +0 -38
  31. package/esm2022/lib/components/configurations/configurations.component.mjs +0 -97
  32. package/esm2022/lib/components/instructions/instructions.component.mjs +0 -139
  33. package/esm2022/lib/components/panel/panel.component.mjs +0 -34
  34. package/esm2022/lib/components/runnable-editor/runnable-editor.component.mjs +0 -169
  35. package/esm2022/lib/components/tests/test-cases/test-cases.component.mjs +0 -198
  36. package/esm2022/lib/components/tests/test-cases-content/test-cases-content.component.mjs +0 -96
  37. package/esm2022/lib/components/tests/test-cases-status/test-cases-status.component.mjs +0 -21
  38. package/esm2022/lib/components/tests/test-results.component.mjs +0 -127
  39. package/esm2022/lib/components/tgo-coding-test/tgo-coding-test.component.mjs +0 -280
  40. package/esm2022/lib/components/tgo-coding-test-candidate-view/tgo-coding-test-candidate-view.component.mjs +0 -476
  41. package/esm2022/lib/config/index.mjs +0 -2
  42. package/esm2022/lib/config/tgo-coding-test.config.mjs +0 -2
  43. package/esm2022/lib/config/tgo-coding-test.provider.mjs +0 -34
  44. package/esm2022/lib/config/tgo-coding-test.token.mjs +0 -14
  45. package/esm2022/lib/models/auto-saved-data.mjs +0 -2
  46. package/esm2022/lib/models/code-event.mjs +0 -2
  47. package/esm2022/lib/models/coderunner-execution-results.mjs +0 -2
  48. package/esm2022/lib/models/configs.mjs +0 -2
  49. package/esm2022/lib/models/language-change-action.mjs +0 -2
  50. package/esm2022/lib/models/lat-languages.mjs +0 -3
  51. package/esm2022/lib/models/mixpanel-events.mjs +0 -2
  52. package/esm2022/lib/models/mode.mjs +0 -2
  53. package/esm2022/lib/models/paste-data.mjs +0 -2
  54. package/esm2022/lib/models/programming-language.mjs +0 -2
  55. package/esm2022/lib/models/test-cases.mjs +0 -7
  56. package/esm2022/lib/models/theme.mjs +0 -2
  57. package/esm2022/lib/models/translations.mjs +0 -2
  58. package/esm2022/lib/models/view-mode.mjs +0 -8
  59. package/esm2022/lib/pipes/memoize-func.pipe.mjs +0 -39
  60. package/esm2022/lib/services/candidate-coding-test-services/candidature-api.service.mjs +0 -19
  61. package/esm2022/lib/services/candidate-coding-test-services/coderunner-api.service.mjs +0 -58
  62. package/esm2022/lib/services/candidate-coding-test-services/coding-test-tour.service.mjs +0 -89
  63. package/esm2022/lib/services/candidate-coding-test-services/coding-test.service.mjs +0 -490
  64. package/esm2022/lib/services/candidate-coding-test-services/index.mjs +0 -5
  65. package/esm2022/lib/services/coding-test-config.service.mjs +0 -51
  66. package/esm2022/lib/services/configurations.service.mjs +0 -89
  67. package/esm2022/lib/services/lib-coding-test.service.mjs +0 -106
  68. package/esm2022/lib/services/storage.service.mjs +0 -624
  69. package/esm2022/lib/services/test-cases.service.mjs +0 -30
  70. package/esm2022/lib/services/theme.service.mjs +0 -36
  71. package/esm2022/lib/utils/additional-languages/erlang.mjs +0 -103
  72. package/esm2022/lib/utils/resize-element.mjs +0 -13
  73. package/esm2022/lib/utils/time-to-ms.util.mjs +0 -11
  74. package/esm2022/shared/index.mjs +0 -5
  75. package/esm2022/shared/lib/components/audio-animation/audio-animation.component.mjs +0 -114
  76. package/esm2022/shared/lib/components/audio-animation/index.mjs +0 -2
  77. package/esm2022/shared/lib/components/index.mjs +0 -3
  78. package/esm2022/shared/lib/components/vimeo-video/index.mjs +0 -2
  79. package/esm2022/shared/lib/components/vimeo-video/vimeo-video.component.mjs +0 -101
  80. package/esm2022/shared/lib/models/answer.mjs +0 -2
  81. package/esm2022/shared/lib/models/assessment.mjs +0 -2
  82. package/esm2022/shared/lib/models/environment.mjs +0 -2
  83. package/esm2022/shared/lib/models/index.mjs +0 -9
  84. package/esm2022/shared/lib/models/question-component.mjs +0 -2
  85. package/esm2022/shared/lib/models/question.mjs +0 -2
  86. package/esm2022/shared/lib/models/test.mjs +0 -2
  87. package/esm2022/shared/lib/models/translations.mjs +0 -2
  88. package/esm2022/shared/lib/models/window.mjs +0 -2
  89. package/esm2022/shared/lib/services/api/api.service.mjs +0 -97
  90. package/esm2022/shared/lib/services/api/mocked-api.service.mjs +0 -131
  91. package/esm2022/shared/lib/services/environment/environment.service.mjs +0 -13
  92. package/esm2022/shared/lib/services/index.mjs +0 -10
  93. package/esm2022/shared/lib/services/localization/languages.model.mjs +0 -19
  94. package/esm2022/shared/lib/services/localization/transloco-lazy-module-utils.mjs +0 -27
  95. package/esm2022/shared/lib/services/localization/transloco-testing.module.mjs +0 -11
  96. package/esm2022/shared/lib/services/media/media.service.mjs +0 -129
  97. package/esm2022/shared/lib/services/mixpanel/mixpanel.service.mjs +0 -30
  98. package/esm2022/shared/lib/services/theme/theme.service.mjs +0 -24
  99. package/esm2022/shared/test-mocks/assessment-test.mock.mjs +0 -112
  100. package/esm2022/shared/test-mocks/index.mjs +0 -3
  101. package/esm2022/shared/test-mocks/tgo-ui.mock.mjs +0 -39
  102. package/esm2022/testgorilla-tgo-coding-test.mjs +0 -5
@@ -1,476 +0,0 @@
1
- import { __decorate } from "tslib";
2
- import { CommonModule } from '@angular/common';
3
- import { Component, computed, EventEmitter, HostBinding, inject, Input, Output, signal, ViewEncapsulation, } from '@angular/core';
4
- import { ActivatedRoute, RouterModule } from '@angular/router';
5
- import { translate, TRANSLOCO_SCOPE, TranslocoModule, TranslocoService } from '@ngneat/transloco';
6
- import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';
7
- import { ApiService, EnvironmentService, getAvailableLangs, MixpanelService, ThemeService, TranslocoLazyModuleUtils, } from '../../../shared/index.mjs';
8
- import { ConfirmDialogComponent, DialogComponentModule, DialogService, SnackbarComponentModule, } from '@testgorilla/tgo-ui';
9
- import { GuidedTourModule, GuidedTourService } from 'ngx-guided-tour';
10
- import { interval, Observable, Subscription } from 'rxjs';
11
- import { switchMap, take, tap } from 'rxjs/operators';
12
- import { ROOT_TRANSLATIONS_SCOPE } from '../../models/translations';
13
- import { ViewMode } from '../../models/view-mode';
14
- import { CandidatureApiService, CoderunnerApiService, CodingTestService, CodingTestTourService, } from '../../services/candidate-coding-test-services';
15
- import { CodingTestConfigService } from '../../services/coding-test-config.service';
16
- import { LibCodingTestService } from '../../services/lib-coding-test.service';
17
- import { TgoCodingTestComponent } from '../tgo-coding-test/tgo-coding-test.component';
18
- import * as i0 from "@angular/core";
19
- import * as i1 from "@ngneat/transloco";
20
- import * as i2 from "ngx-guided-tour";
21
- import * as i3 from "@angular/common";
22
- let TgoCodingTestCandidateViewComponent = class TgoCodingTestCandidateViewComponent {
23
- dialogService = inject(DialogService);
24
- translationScope = inject(TRANSLOCO_SCOPE);
25
- candidatureApiService = inject(CandidatureApiService);
26
- codingTestTourService = inject(CodingTestTourService);
27
- libCodingTestService = inject(LibCodingTestService);
28
- environmentService = inject(EnvironmentService);
29
- codingTestService = inject(CodingTestService);
30
- translocoService = inject(TranslocoService);
31
- themeService = inject(ThemeService);
32
- apiService = inject(ApiService);
33
- route = inject(ActivatedRoute);
34
- codingTestConfigService = inject(CodingTestConfigService);
35
- assessment;
36
- question;
37
- test;
38
- expirationObservable;
39
- completeObservable;
40
- isDemo;
41
- validationStatusChanged = new EventEmitter(); // eslint-disable-line @typescript-eslint/no-explicit-any
42
- antiCheatingConfigurationChanged = new EventEmitter();
43
- fullscreenChanged = new EventEmitter();
44
- themeChanged = new EventEmitter();
45
- codingFullscreenChanged = new EventEmitter();
46
- navigationButtonStateChanged = new EventEmitter();
47
- configurationStateChanged = new EventEmitter();
48
- submissionStateChanged = new EventEmitter();
49
- loadingStateChanged = new EventEmitter();
50
- hostClass = 'micro-question-code';
51
- subscription = new Subscription();
52
- initCode = '';
53
- viewModes = ViewMode;
54
- mode = "running" /* Modes.Running */;
55
- companyColor = this.themeService.getCompanyColor();
56
- initCodesMap = new Map();
57
- languages = signal([]);
58
- codingLibTranslations = signal({});
59
- rawLanguages = [];
60
- currentLanguage;
61
- isSQL = false;
62
- isLAT = true;
63
- code = '';
64
- codingTestResults;
65
- testResultsLoading = computed(() => this.codingTestService.isTestResultsLoading());
66
- exampleTestCases = [];
67
- activeGuidedTourId$ = this.codingTestTourService.activeGuidedTourId$;
68
- firstTestRunComplete = false;
69
- canopyUiTheme = 'light';
70
- wasTourShown = false;
71
- ngOnDestroy() {
72
- if (!this.test?.is_preview_mode) {
73
- this.antiCheatingConfigurationChanged.emit({
74
- fullscreenTracking: false,
75
- mouseEventTracking: false,
76
- snapshotsTracking: false,
77
- });
78
- }
79
- this.subscription.unsubscribe();
80
- }
81
- ngOnInit() {
82
- this.setupState();
83
- this.handleGuidedTour();
84
- if (!this.test?.is_preview_mode) {
85
- this.antiCheatingConfigurationChanged.emit({
86
- fullscreenTracking: true,
87
- mouseEventTracking: true,
88
- snapshotsTracking: true,
89
- });
90
- this.setupAutosaveEvent();
91
- }
92
- const isNextQuestionDisabled = !this.test?.is_preview_mode;
93
- this.configurationStateChanged.emit({
94
- isSavingQuestionDisabled: isNextQuestionDisabled,
95
- });
96
- this.navigationButtonStateChanged.emit({
97
- disabled: isNextQuestionDisabled,
98
- });
99
- this.subscription.add(this.expirationObservable?.subscribe(() => {
100
- this.clearSavedCode();
101
- if (!this.test?.is_preview_mode) {
102
- this.clearLastLanguageSelected();
103
- this.submitCode();
104
- this.enableNextButton();
105
- }
106
- }));
107
- this.subscription.add(this.completeObservable?.subscribe(() => {
108
- if (!this.test?.is_preview_mode) {
109
- this.openSaveDialog();
110
- }
111
- else {
112
- this.clearSavedCode();
113
- }
114
- }));
115
- if (!this.isSQL) {
116
- this.loadAvailableLanguages();
117
- this.setTestCases();
118
- }
119
- else {
120
- this.setSqlTestCases();
121
- this.setSqlLang();
122
- this.setSqlInitCode();
123
- this.loadingStateChanged.emit(false);
124
- }
125
- this.setListeners();
126
- }
127
- openSaveDialog() {
128
- const dialogRef = this.dialogService.open(ConfirmDialogComponent, {
129
- applicationTheme: this.canopyUiTheme,
130
- size: 'small',
131
- panelClass: '',
132
- extraData: {
133
- title: translate('CODING_QUESTION.MODALS.FINISH_TEST.TITLE') ?? '',
134
- message: translate('CODING_QUESTION.MODALS.FINISH_TEST.MESSAGE') ?? '',
135
- confirmButtonText: translate('CODING_QUESTION.MODALS.FINISH_TEST.SUBMIT') ?? '',
136
- cancelButtonText: translate('CODING_QUESTION.MODALS.FINISH_TEST.CANCEL') ?? '',
137
- color: this.companyColor,
138
- },
139
- });
140
- dialogRef.afterClosed().subscribe(result => {
141
- if (!result) {
142
- return;
143
- }
144
- this.clearSavedCode();
145
- this.clearLastLanguageSelected();
146
- this.submitCode();
147
- this.enableNextButton();
148
- });
149
- }
150
- clearLastLanguageSelected() {
151
- this.libCodingTestService.clearLastLanguageSelected();
152
- }
153
- clearSavedCode() {
154
- this.libCodingTestService.triggerClearSavedCode();
155
- }
156
- submitCode() {
157
- if (this.code) {
158
- this.submissionStateChanged?.emit({
159
- text: this.code,
160
- language: this.getVersionedLanguage(),
161
- });
162
- }
163
- }
164
- getVersionedLanguage() {
165
- const language = this.currentLanguage;
166
- if (!language) {
167
- return;
168
- }
169
- if (this.isSQL) {
170
- return "sqlite3-3.36.0" /* ProgrammingLanguageVersioned.SQLite */;
171
- }
172
- return `${language}-${this.libCodingTestService.getVersion()}`;
173
- }
174
- enableNextButton() {
175
- this.configurationStateChanged.emit({
176
- isSavingQuestionDisabled: false,
177
- });
178
- }
179
- languageChange(selectedLangName) {
180
- const selectedLang = this.rawLanguages.filter(language => language.name === selectedLangName)[0];
181
- this.codingTestService.handleLanguageChangeModal(this.question.id, selectedLang, this.canopyUiTheme, this.companyColor);
182
- }
183
- updateCode(code) {
184
- this.code = code;
185
- }
186
- runTest() {
187
- this.codingTestService.runTest(this.question.id, this.code, this.isLAT, this.isSQL, false, !!this.test.is_preview_mode, this.question.question_id, this.test.id, this.test);
188
- if (!this.firstTestRunComplete) {
189
- this.navigationButtonStateChanged.emit({
190
- disabled: false,
191
- });
192
- this.firstTestRunComplete = true;
193
- }
194
- }
195
- screenshotPaste(event) {
196
- if (event.type !== 'paste') {
197
- return;
198
- }
199
- this.codingTestService
200
- .sendCopypasteEvent$(this.code, event.data, this.question.id)
201
- .pipe(take(1))
202
- .subscribe();
203
- }
204
- setupAutosaveEvent() {
205
- this.subscription.add(interval(5000)
206
- .pipe(untilDestroyed(this), switchMap(() => this.codingTestService.sendAutosaveEvent$(this.code, this.question.id)))
207
- .subscribe());
208
- }
209
- setupState() {
210
- this.setApiParams();
211
- this.setCodingLibTranslations();
212
- this.setIsSQL();
213
- this.setIsLat();
214
- this.setMode();
215
- }
216
- setCodingLibTranslations() {
217
- // TRANSLOCO_SCOPE is passed here to make sure that translation scope is resolved by the library
218
- this.translocoService
219
- .selectTranslateObject(`CODING_LIB`, {}, this.translationScope)
220
- .pipe(take(1))
221
- .subscribe(translations => {
222
- this.codingLibTranslations.set(translations);
223
- });
224
- }
225
- setApiParams() {
226
- const invitationUuid = this.route.snapshot.firstChild?.url[0].path || '';
227
- const contentLanguage = this.assessment?.locale ?? 'en';
228
- const apiUrl = this.codingTestConfigService.getApiUrl();
229
- this.apiService.setParams(invitationUuid, contentLanguage, ROOT_TRANSLATIONS_SCOPE, apiUrl);
230
- }
231
- setIsSQL() {
232
- this.isSQL = this.question?.context.code_language === 'sql';
233
- this.codingTestService.setIsSQLTest(this.isSQL);
234
- }
235
- setSqlInitCode() {
236
- this.initCode = this.question?.context.initial_code;
237
- }
238
- setSqlLang() {
239
- const sqlLanguage = this.question?.context.code_language;
240
- this.languages.set([
241
- {
242
- label: 'nonLAT',
243
- value: sqlLanguage,
244
- },
245
- ]);
246
- this.currentLanguage = sqlLanguage;
247
- }
248
- setIsLat() {
249
- // todo: add response field if possible ?
250
- // this.isLAT = this.test?.is_language_agnostic_test ?? false;
251
- this.isLAT = !this.isSQL;
252
- }
253
- setMode() {
254
- this.mode = this.test?.is_preview_mode ? "preview" /* Modes.Preview */ : "running" /* Modes.Running */;
255
- }
256
- listenGuidedTourStart() {
257
- this.libCodingTestService.startGuidedTour$.pipe(untilDestroyed(this)).subscribe(() => {
258
- const guidedTourMode = this.test?.is_preview_mode
259
- ? "practice" /* CodingTestTourMode.PracticeQuestion */
260
- : "real" /* CodingTestTourMode.RealQuestion */;
261
- this.codingTestTourService.init(guidedTourMode);
262
- });
263
- }
264
- handleGuidedTour() {
265
- if (!this.environmentService.isMobile && !this.wasTourShown && this.test?.is_preview_mode) {
266
- const delayForGuidedTour = 1500;
267
- setTimeout(() => {
268
- this.codingTestTourService.init("practice" /* CodingTestTourMode.PracticeQuestion */);
269
- this.wasTourShown = true;
270
- }, delayForGuidedTour);
271
- }
272
- }
273
- getAllLanguages() {
274
- const boilerplates = this.question?.context.boilerplates ?? [];
275
- return boilerplates.map(({ programming_language }) => programming_language);
276
- }
277
- loadAvailableLanguages() {
278
- this.candidatureApiService
279
- .getAvailableLanguages$()
280
- .pipe(take(1), tap(availableLangsIds => {
281
- const languages = this.getAllLanguages();
282
- const areAllLangsAvailable = availableLangsIds.length === 0;
283
- this.rawLanguages = areAllLangsAvailable
284
- ? languages
285
- : languages.filter(({ id }) => id !== undefined && availableLangsIds.includes(id));
286
- this.languages.set(this.rawLanguages.map(language => ({
287
- label: typeof language.name === 'string' && language.name.length > 0
288
- ? language.name.charAt(0).toUpperCase() + language.name.slice(1)
289
- : 'Unknown',
290
- value: language.name,
291
- version: language.version,
292
- })));
293
- }), tap(() => {
294
- this.loadingStateChanged.emit(false);
295
- }), tap(() => {
296
- const boilerplates = this.question?.context.boilerplates ?? [];
297
- boilerplates.forEach(boilerplate => {
298
- if (boilerplate.programming_language.name) {
299
- this.initCodesMap.set(boilerplate.programming_language.name, boilerplate.code);
300
- }
301
- });
302
- }), switchMap(() => this.libCodingTestService.currentLanguage$), tap((language) => {
303
- const currentLang = this.rawLanguages.find(x => x.name === language);
304
- if (currentLang) {
305
- this.codingTestService.setCurrentLanguageLAT(currentLang);
306
- }
307
- const initCode = this.initCodesMap.get(language);
308
- if (initCode) {
309
- this.initCode = initCode;
310
- this.updateCode(this.initCode);
311
- }
312
- }))
313
- .subscribe(() => {
314
- this.libCodingTestService.setBoilerplateLoadingStatus(false);
315
- });
316
- }
317
- listenThemeChange() {
318
- this.libCodingTestService.themeChanged$.pipe(untilDestroyed(this)).subscribe(theme => {
319
- this.canopyUiTheme = theme === "theme-dark" /* Themes.Dark */ ? 'dark' : 'light';
320
- this.themeChanged.emit(this.canopyUiTheme);
321
- });
322
- }
323
- listenFullscreenChange() {
324
- this.libCodingTestService.isFullscreen$
325
- .pipe(untilDestroyed(this))
326
- .subscribe(isFullscreen => this.fullscreenChanged.emit(isFullscreen));
327
- }
328
- listenDeleteCustomTestCases() {
329
- this.codingTestService
330
- .listenDeleteCustomTestCases()
331
- .pipe(untilDestroyed(this))
332
- .subscribe(({ index }) => {
333
- this.codingTestService.handleDeleteTestCaseModal(index, this.canopyUiTheme, this.companyColor);
334
- });
335
- }
336
- listenLanguageChange() {
337
- this.libCodingTestService.currentLanguage$
338
- .pipe(untilDestroyed(this))
339
- .subscribe((language) => {
340
- this.currentLanguage = language;
341
- const code = this.initCodesMap.get(language);
342
- if (code) {
343
- this.initCode = code;
344
- }
345
- else {
346
- this.initCode = '';
347
- console.warn(`No initial code found for language: ${language}`);
348
- }
349
- });
350
- }
351
- listenResetCode() {
352
- this.codingTestService
353
- .listenCodingTestChanges()
354
- .pipe(untilDestroyed(this))
355
- .subscribe(() => {
356
- this.codingTestService.handleResetCodeModal(this.canopyUiTheme, this.companyColor);
357
- });
358
- }
359
- listenTestResults() {
360
- this.codingTestService.codingTestResults$.pipe(untilDestroyed(this)).subscribe(results => {
361
- this.codingTestResults = results;
362
- });
363
- }
364
- setSqlTestCases() {
365
- const testCases = this.question?.context?.sql_testcases.map(testCase => ({
366
- ...testCase,
367
- post_sql: testCase.post_sql || '',
368
- initial_sql: this.question?.context?.initial_sql || '',
369
- }));
370
- this.codingTestService.setSqlTestCases(testCases);
371
- this.exampleTestCases = testCases.map(this.codingTestService.transformToExampleSQLTestCase);
372
- }
373
- setTestCases() {
374
- this.exampleTestCases = this.question?.context?.testcases?.map(this.codingTestService.transformToExampleLATtestCase);
375
- }
376
- setListeners() {
377
- this.listenGuidedTourStart();
378
- this.listenFullscreenChange();
379
- this.listenThemeChange();
380
- this.listenResetCode();
381
- this.codingTestService.trackConfigChanged(!!this.test?.is_preview_mode);
382
- this.listenTestResults();
383
- if (this.isLAT) {
384
- this.listenDeleteCustomTestCases();
385
- this.listenLanguageChange();
386
- }
387
- }
388
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TgoCodingTestCandidateViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
389
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: TgoCodingTestCandidateViewComponent, isStandalone: true, selector: "tgo-coding-test-candidate-view", inputs: { assessment: "assessment", question: "question", test: "test", expirationObservable: "expirationObservable", completeObservable: "completeObservable", isDemo: "isDemo" }, outputs: { validationStatusChanged: "validationStatusChanged", antiCheatingConfigurationChanged: "antiCheatingConfigurationChanged", fullscreenChanged: "fullscreenChanged", themeChanged: "themeChanged", codingFullscreenChanged: "codingFullscreenChanged", navigationButtonStateChanged: "navigationButtonStateChanged", configurationStateChanged: "configurationStateChanged", submissionStateChanged: "submissionStateChanged", loadingStateChanged: "loadingStateChanged" }, host: { properties: { "class": "this.hostClass" } }, providers: [
390
- TranslocoLazyModuleUtils.getScopeProvider('tgo-coding-test', getAvailableLangs(), ROOT_TRANSLATIONS_SCOPE, (lang) => {
391
- // Fetch from app assets; demo app copies the library assets to
392
- // /assets/tgo-coding-test via project.json.
393
- const url = new URL(`assets/tgo-coding-test/i18n/${lang}.json`, document.baseURI).href;
394
- return fetch(url).then(res => res.json());
395
- }),
396
- EnvironmentService,
397
- CoderunnerApiService,
398
- CodingTestService,
399
- CodingTestTourService,
400
- GuidedTourService,
401
- ThemeService,
402
- CandidatureApiService,
403
- MixpanelService,
404
- // use MockedApiService for local demo ONLY
405
- ApiService, //{ provide: ApiService, useClass: MockedApiService },
406
- ], ngImport: i0, template: "<ng-container *transloco=\"let t; read: 'CODING_QUESTION'\">\n @if (languages()?.length && codingLibTranslations()) {\n <tgo-coding-test\n class=\"coding-lib\"\n [assessmentId]=\"assessment!.uuid!\"\n [questionId]=\"question!.question_id!\"\n [isLAT]=\"isLAT\"\n [canAddCustomTestCases]=\"isLAT\"\n [isSQL]=\"isSQL\"\n [languages]=\"languages()\"\n [initCode]=\"initCode\"\n [mode]=\"mode\"\n [viewMode]=\"viewModes.Full\"\n [loading]=\"testResultsLoading()\"\n [companyColor]=\"companyColor\"\n [questionText]=\"question.text\"\n [testCasesStatus]=\"codingTestResults?.resume\"\n [runTestResponse]=\"codingTestResults?.listResponse!\"\n [exampleTestCases]=\"exampleTestCases\"\n [applicationTheme]=\"canopyUiTheme\"\n [translations]=\"codingLibTranslations()\"\n (codeChange)=\"updateCode($event)\"\n (runTestClick)=\"runTest()\"\n (languageChange)=\"languageChange($event)\"\n (pasteEvent)=\"screenshotPaste($event)\"\n >\n </tgo-coding-test>\n }\n</ng-container>\n\n<ngx-guided-tour\n [ngClass]=\"activeGuidedTourId$ | async\"\n [ngStyle]=\"{ '--company-color': companyColor }\"\n [class.dark]=\"canopyUiTheme === 'dark'\"\n></ngx-guided-tour>\n\n", styles: ["body.tour-open{overflow:hidden}ngx-guided-tour .guided-tour-user-input-mask{z-index:1081}ngx-guided-tour .guided-tour-spotlight-overlay{z-index:1082}ngx-guided-tour .tour-orb{z-index:1079;background-color:#625aff;box-shadow:0 0 .3rem .1rem #625aff}ngx-guided-tour .tour-orb .tour-orb-ring:after{border:1rem solid #625aff;box-shadow:0 0 .1rem .1rem #625aff}ngx-guided-tour .tour-step{z-index:1083}ngx-guided-tour .tour-step.tour-bottom .tour-arrow:before,ngx-guided-tour .tour-step.tour-bottom-right .tour-arrow:before,ngx-guided-tour .tour-step.tour-bottom-left .tour-arrow:before{width:0;height:0;content:\"\";z-index:2;border-bottom:1rem solid #ffffff;border-left:1rem solid transparent;border-right:1rem solid transparent}ngx-guided-tour .tour-step.tour-top .tour-arrow:before,ngx-guided-tour .tour-step.tour-top-right .tour-arrow:before,ngx-guided-tour .tour-step.tour-top-left .tour-arrow:before{width:0;height:0;content:\"\";z-index:2;border-top:1rem solid #ffffff;border-left:1rem solid transparent;border-right:1rem solid transparent}ngx-guided-tour .tour-step.tour-left .tour-arrow:before{width:0;height:0;content:\"\";z-index:2;border-left:1rem solid #ffffff;border-bottom:1rem solid transparent;border-top:1rem solid transparent}ngx-guided-tour .tour-step.tour-right .tour-arrow:before{width:0;height:0;content:\"\";z-index:2;border-right:1rem solid #ffffff;border-bottom:1rem solid transparent;border-top:1rem solid transparent}ngx-guided-tour .tour-step .tour-block{color:#231f1f;background-color:#fff;box-shadow:0 .4rem .6rem #4c4c4c}ngx-guided-tour .tour-step .tour-buttons button.skip-button{color:#5e5e5e}ngx-guided-tour .tour-step .tour-buttons .back-button{color:#007bff}ngx-guided-tour .tour-step .tour-buttons .next-button{background-color:#007bff;color:#fff}ngx-guided-tour .tour-step .tour-buttons .next-button:hover{background-color:#0069d9;color:#fff}.bg-teal-60b{background:#1c443c}.bg-teal-30b{background:#31766a}.bg-teal-default{background:#46a997}.bg-teal-30w{background:#7ec3b6}.bg-teal-60w{background:#b5ddd5}.bg-teal-secondary{background:#cbd6cb}.bg-teal-90w{background:#ecf6f5}.bg-petrol-60b{background:#102930}.bg-petrol-30b{background:#1b4754}.bg-petrol-default{background:#276678}.bg-petrol-30w{background:#6894a0}.bg-petrol-60w{background:#a9c2c9}.bg-petrol-secondary{background:#c8d7de}.bg-petrol-90w{background:#e9f0f1}.bg-error-60b{background:#513131}.bg-error-30b{background:#8e5655}.bg-error-60w{background:#e3c3c6}.bg-error-secondary{background:#f0dad9}.bg-error-default{background:#cb7b7a}.bg-warning-secondary{background:#f0d6bb}.bg-warning-default{background:#cca45f}.bg-black{background:#000}.bg-dark{background:#888}.bg-medium{background:#e0e0e0}.bg-grey{background:#ededed}.bg-light{background:#f6f6f6}.bg-white{background:#fff}.bg-box-shadow{background:#00000014}.bg-navigation-subtitle{background:#528593}.bgc-teal-60b{background-color:#1c443c}.bgc-teal-30b{background-color:#31766a}.bgc-teal-default{background-color:#46a997}.bgc-teal-30w{background-color:#7ec3b6}.bgc-teal-60w{background-color:#b5ddd5}.bgc-teal-secondary{background-color:#cbd6cb}.bgc-teal-90w{background-color:#ecf6f5}.bgc-petrol-60b{background-color:#102930}.bgc-petrol-30b{background-color:#1b4754}.bgc-petrol-default{background-color:#276678}.bgc-petrol-30w{background-color:#6894a0}.bgc-petrol-60w{background-color:#a9c2c9}.bgc-petrol-secondary{background-color:#c8d7de}.bgc-petrol-90w{background-color:#e9f0f1}.bgc-error-60b{background-color:#513131}.bgc-error-30b{background-color:#8e5655}.bgc-error-60w{background-color:#e3c3c6}.bgc-error-secondary{background-color:#f0dad9}.bgc-error-default{background-color:#cb7b7a}.bgc-warning-secondary{background-color:#f0d6bb}.bgc-warning-default{background-color:#cca45f}.bgc-black{background-color:#000}.bgc-dark{background-color:#888}.bgc-medium{background-color:#e0e0e0}.bgc-grey{background-color:#ededed}.bgc-light{background-color:#f6f6f6}.bgc-white{background-color:#fff}.bgc-box-shadow{background-color:#00000014}.bgc-navigation-subtitle{background-color:#528593}body.tour-open ngx-guided-tour{--guided-tour-background-color: #ffffff;--guided-tour-text-color: #000000}body.tour-open ngx-guided-tour.dark{--guided-tour-background-color: #2d2d2d;--guided-tour-text-color: #ffffff}body.tour-open ngx-guided-tour .tour-step.hidden{display:none}body.tour-open ngx-guided-tour .tour-step h2.tour-title,body.tour-open ngx-guided-tour .tour-step h3.tour-title{font-size:20px;padding-bottom:0;margin-top:0}body.tour-open ngx-guided-tour .tour-step .tour-block{color:var(--guided-tour-text-color);background-color:var(--guided-tour-background-color);border-radius:5px;padding:37px;box-shadow:0 0 13px #bbb}body.tour-open ngx-guided-tour .tour-step .tour-buttons button{text-align:center;border-radius:5px;width:45%;height:48px;padding:0;font-weight:600}body.tour-open ngx-guided-tour .tour-step .tour-buttons button.skip-button{background:#e2e2e2}body.tour-open ngx-guided-tour .tour-step .tour-buttons button.next-button{color:#fff;background-color:#46a997}body.tour-open ngx-guided-tour .tour-step .tour-buttons button.back-button{display:none}body.tour-open ngx-guided-tour .tour-step.tour-bottom .tour-arrow:before{border-bottom:1rem solid var(--guided-tour-background-color)}body.tour-open ngx-guided-tour .tour-step.tour-top .tour-arrow:before{border-top:1rem solid var(--guided-tour-background-color)}body.tour-open ngx-guided-tour .tour-step.tour-left .tour-arrow:before{border-left:1rem solid var(--guided-tour-background-color)}body.tour-open ngx-guided-tour .tour-step.tour-right .tour-arrow:before{border-right:1rem solid var(--guided-tour-background-color)}body.tour-open ngx-guided-tour .tour-step.tour-bottom-right .tour-arrow:before{border-bottom-color:var(--guided-tour-background-color)}body.tour-open ngx-guided-tour .tour-step .tour-content{text-align:center;font-size:14px}body.tour-open ngx-guided-tour .tour-step h2.tour-title{text-align:center}body.tour-open ngx-guided-tour .tour-step h3.tour-title{text-align:center}body.tour-open ngx-guided-tour .guided-tour-spotlight-overlay{box-shadow:0 0 0 9999px #0000004d,0 0 1.5rem #00000026;border-radius:5px}body.tour-open ngx-guided-tour.lat-coding-tour h3.tour-title,body.tour-open ngx-guided-tour.lat-coding-tour h2.tour-title,body.tour-open ngx-guided-tour.lat-coding-tour .tour-content{text-align:left}body.tour-open ngx-guided-tour.lat-coding-tour .tour-content{padding-bottom:24px}body.tour-open ngx-guided-tour.lat-coding-tour .tour-buttons button.skip-button{background:#fff;border:1px solid #000000}body.tour-open ngx-guided-tour.lat-coding-tour .tour-buttons button.next-button{background-color:var(--company-color, #D410AA)}body.tour-open[theme=dark] ngx-guided-tour .tour-step .tour-block{box-shadow:none}body.tour-open[theme=dark] ngx-guided-tour .guided-tour-spotlight-overlay{box-shadow:0 0 0 9999px #000000a6,0 0 1.5rem #00000080;border-radius:5px}body.theme-dark ngx-guided-tour .tour-step .tour-block{box-shadow:none}body.theme-dark ngx-guided-tour .guided-tour-spotlight-overlay{box-shadow:0 0 0 9999px #000000a6,0 0 1.5rem #00000080;border-radius:5px}body .tgo-test-code{display:flex;flex:1;justify-content:center}body .tgo-test-code tgo-question,body .tgo-test-code tgo-micro-test-library-shell-container{display:flex}body[theme=dark] .micro-question-code .coding-lib ui-dropdown .mat-mdc-text-field-wrapper,body[theme=dark] .micro-question-code .coding-lib ui-field .mat-mdc-text-field-wrapper{background-color:transparent}.micro-question-code{display:flex}.micro-question-code .coding-lib{display:block;height:100%}\n"], dependencies: [{ kind: "ngmodule", type: TranslocoModule }, { kind: "directive", type: i1.TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoLang", "translocoLoadingTpl"] }, { kind: "ngmodule", type: DialogComponentModule }, { kind: "ngmodule", type: SnackbarComponentModule }, { kind: "component", type: TgoCodingTestComponent, selector: "tgo-coding-test[languages]", inputs: ["initCode", "snapshot", "functionParams", "functionName", "returnType", "isLAT", "isSQL", "shouldGenerateInitCode", "canAddCustomTestCases", "selectedProgrammingLanguage", "languages", "isReadonly", "autoHeight", "translations", "questionText", "mode", "assessmentId", "companyColor", "testCasesStatus", "loading", "runTestResponse", "viewMode", "exampleTestCases", "hideTestCases", "applicationTheme", "questionId"], outputs: ["pasteEvent", "codeChange", "runTestClick", "languageChange"] }, { kind: "ngmodule", type: GuidedTourModule }, { kind: "component", type: i2.GuidedTourComponent, selector: "ngx-guided-tour", inputs: ["topOfPageAdjustment", "tourStepWidth", "minimalTourStepWidth", "skipText", "nextText", "doneText", "closeText", "backText", "progressIndicatorLocation", "progressIndicator"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "ngmodule", type: RouterModule }], encapsulation: i0.ViewEncapsulation.None });
407
- };
408
- TgoCodingTestCandidateViewComponent = __decorate([
409
- UntilDestroy()
410
- ], TgoCodingTestCandidateViewComponent);
411
- export { TgoCodingTestCandidateViewComponent };
412
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TgoCodingTestCandidateViewComponent, decorators: [{
413
- type: Component,
414
- args: [{ standalone: true, selector: 'tgo-coding-test-candidate-view', encapsulation: ViewEncapsulation.None, imports: [
415
- TranslocoModule,
416
- DialogComponentModule,
417
- SnackbarComponentModule,
418
- TgoCodingTestComponent,
419
- GuidedTourModule,
420
- CommonModule,
421
- RouterModule,
422
- ], providers: [
423
- TranslocoLazyModuleUtils.getScopeProvider('tgo-coding-test', getAvailableLangs(), ROOT_TRANSLATIONS_SCOPE, (lang) => {
424
- // Fetch from app assets; demo app copies the library assets to
425
- // /assets/tgo-coding-test via project.json.
426
- const url = new URL(`assets/tgo-coding-test/i18n/${lang}.json`, document.baseURI).href;
427
- return fetch(url).then(res => res.json());
428
- }),
429
- EnvironmentService,
430
- CoderunnerApiService,
431
- CodingTestService,
432
- CodingTestTourService,
433
- GuidedTourService,
434
- ThemeService,
435
- CandidatureApiService,
436
- MixpanelService,
437
- // use MockedApiService for local demo ONLY
438
- ApiService, //{ provide: ApiService, useClass: MockedApiService },
439
- ], template: "<ng-container *transloco=\"let t; read: 'CODING_QUESTION'\">\n @if (languages()?.length && codingLibTranslations()) {\n <tgo-coding-test\n class=\"coding-lib\"\n [assessmentId]=\"assessment!.uuid!\"\n [questionId]=\"question!.question_id!\"\n [isLAT]=\"isLAT\"\n [canAddCustomTestCases]=\"isLAT\"\n [isSQL]=\"isSQL\"\n [languages]=\"languages()\"\n [initCode]=\"initCode\"\n [mode]=\"mode\"\n [viewMode]=\"viewModes.Full\"\n [loading]=\"testResultsLoading()\"\n [companyColor]=\"companyColor\"\n [questionText]=\"question.text\"\n [testCasesStatus]=\"codingTestResults?.resume\"\n [runTestResponse]=\"codingTestResults?.listResponse!\"\n [exampleTestCases]=\"exampleTestCases\"\n [applicationTheme]=\"canopyUiTheme\"\n [translations]=\"codingLibTranslations()\"\n (codeChange)=\"updateCode($event)\"\n (runTestClick)=\"runTest()\"\n (languageChange)=\"languageChange($event)\"\n (pasteEvent)=\"screenshotPaste($event)\"\n >\n </tgo-coding-test>\n }\n</ng-container>\n\n<ngx-guided-tour\n [ngClass]=\"activeGuidedTourId$ | async\"\n [ngStyle]=\"{ '--company-color': companyColor }\"\n [class.dark]=\"canopyUiTheme === 'dark'\"\n></ngx-guided-tour>\n\n", styles: ["body.tour-open{overflow:hidden}ngx-guided-tour .guided-tour-user-input-mask{z-index:1081}ngx-guided-tour .guided-tour-spotlight-overlay{z-index:1082}ngx-guided-tour .tour-orb{z-index:1079;background-color:#625aff;box-shadow:0 0 .3rem .1rem #625aff}ngx-guided-tour .tour-orb .tour-orb-ring:after{border:1rem solid #625aff;box-shadow:0 0 .1rem .1rem #625aff}ngx-guided-tour .tour-step{z-index:1083}ngx-guided-tour .tour-step.tour-bottom .tour-arrow:before,ngx-guided-tour .tour-step.tour-bottom-right .tour-arrow:before,ngx-guided-tour .tour-step.tour-bottom-left .tour-arrow:before{width:0;height:0;content:\"\";z-index:2;border-bottom:1rem solid #ffffff;border-left:1rem solid transparent;border-right:1rem solid transparent}ngx-guided-tour .tour-step.tour-top .tour-arrow:before,ngx-guided-tour .tour-step.tour-top-right .tour-arrow:before,ngx-guided-tour .tour-step.tour-top-left .tour-arrow:before{width:0;height:0;content:\"\";z-index:2;border-top:1rem solid #ffffff;border-left:1rem solid transparent;border-right:1rem solid transparent}ngx-guided-tour .tour-step.tour-left .tour-arrow:before{width:0;height:0;content:\"\";z-index:2;border-left:1rem solid #ffffff;border-bottom:1rem solid transparent;border-top:1rem solid transparent}ngx-guided-tour .tour-step.tour-right .tour-arrow:before{width:0;height:0;content:\"\";z-index:2;border-right:1rem solid #ffffff;border-bottom:1rem solid transparent;border-top:1rem solid transparent}ngx-guided-tour .tour-step .tour-block{color:#231f1f;background-color:#fff;box-shadow:0 .4rem .6rem #4c4c4c}ngx-guided-tour .tour-step .tour-buttons button.skip-button{color:#5e5e5e}ngx-guided-tour .tour-step .tour-buttons .back-button{color:#007bff}ngx-guided-tour .tour-step .tour-buttons .next-button{background-color:#007bff;color:#fff}ngx-guided-tour .tour-step .tour-buttons .next-button:hover{background-color:#0069d9;color:#fff}.bg-teal-60b{background:#1c443c}.bg-teal-30b{background:#31766a}.bg-teal-default{background:#46a997}.bg-teal-30w{background:#7ec3b6}.bg-teal-60w{background:#b5ddd5}.bg-teal-secondary{background:#cbd6cb}.bg-teal-90w{background:#ecf6f5}.bg-petrol-60b{background:#102930}.bg-petrol-30b{background:#1b4754}.bg-petrol-default{background:#276678}.bg-petrol-30w{background:#6894a0}.bg-petrol-60w{background:#a9c2c9}.bg-petrol-secondary{background:#c8d7de}.bg-petrol-90w{background:#e9f0f1}.bg-error-60b{background:#513131}.bg-error-30b{background:#8e5655}.bg-error-60w{background:#e3c3c6}.bg-error-secondary{background:#f0dad9}.bg-error-default{background:#cb7b7a}.bg-warning-secondary{background:#f0d6bb}.bg-warning-default{background:#cca45f}.bg-black{background:#000}.bg-dark{background:#888}.bg-medium{background:#e0e0e0}.bg-grey{background:#ededed}.bg-light{background:#f6f6f6}.bg-white{background:#fff}.bg-box-shadow{background:#00000014}.bg-navigation-subtitle{background:#528593}.bgc-teal-60b{background-color:#1c443c}.bgc-teal-30b{background-color:#31766a}.bgc-teal-default{background-color:#46a997}.bgc-teal-30w{background-color:#7ec3b6}.bgc-teal-60w{background-color:#b5ddd5}.bgc-teal-secondary{background-color:#cbd6cb}.bgc-teal-90w{background-color:#ecf6f5}.bgc-petrol-60b{background-color:#102930}.bgc-petrol-30b{background-color:#1b4754}.bgc-petrol-default{background-color:#276678}.bgc-petrol-30w{background-color:#6894a0}.bgc-petrol-60w{background-color:#a9c2c9}.bgc-petrol-secondary{background-color:#c8d7de}.bgc-petrol-90w{background-color:#e9f0f1}.bgc-error-60b{background-color:#513131}.bgc-error-30b{background-color:#8e5655}.bgc-error-60w{background-color:#e3c3c6}.bgc-error-secondary{background-color:#f0dad9}.bgc-error-default{background-color:#cb7b7a}.bgc-warning-secondary{background-color:#f0d6bb}.bgc-warning-default{background-color:#cca45f}.bgc-black{background-color:#000}.bgc-dark{background-color:#888}.bgc-medium{background-color:#e0e0e0}.bgc-grey{background-color:#ededed}.bgc-light{background-color:#f6f6f6}.bgc-white{background-color:#fff}.bgc-box-shadow{background-color:#00000014}.bgc-navigation-subtitle{background-color:#528593}body.tour-open ngx-guided-tour{--guided-tour-background-color: #ffffff;--guided-tour-text-color: #000000}body.tour-open ngx-guided-tour.dark{--guided-tour-background-color: #2d2d2d;--guided-tour-text-color: #ffffff}body.tour-open ngx-guided-tour .tour-step.hidden{display:none}body.tour-open ngx-guided-tour .tour-step h2.tour-title,body.tour-open ngx-guided-tour .tour-step h3.tour-title{font-size:20px;padding-bottom:0;margin-top:0}body.tour-open ngx-guided-tour .tour-step .tour-block{color:var(--guided-tour-text-color);background-color:var(--guided-tour-background-color);border-radius:5px;padding:37px;box-shadow:0 0 13px #bbb}body.tour-open ngx-guided-tour .tour-step .tour-buttons button{text-align:center;border-radius:5px;width:45%;height:48px;padding:0;font-weight:600}body.tour-open ngx-guided-tour .tour-step .tour-buttons button.skip-button{background:#e2e2e2}body.tour-open ngx-guided-tour .tour-step .tour-buttons button.next-button{color:#fff;background-color:#46a997}body.tour-open ngx-guided-tour .tour-step .tour-buttons button.back-button{display:none}body.tour-open ngx-guided-tour .tour-step.tour-bottom .tour-arrow:before{border-bottom:1rem solid var(--guided-tour-background-color)}body.tour-open ngx-guided-tour .tour-step.tour-top .tour-arrow:before{border-top:1rem solid var(--guided-tour-background-color)}body.tour-open ngx-guided-tour .tour-step.tour-left .tour-arrow:before{border-left:1rem solid var(--guided-tour-background-color)}body.tour-open ngx-guided-tour .tour-step.tour-right .tour-arrow:before{border-right:1rem solid var(--guided-tour-background-color)}body.tour-open ngx-guided-tour .tour-step.tour-bottom-right .tour-arrow:before{border-bottom-color:var(--guided-tour-background-color)}body.tour-open ngx-guided-tour .tour-step .tour-content{text-align:center;font-size:14px}body.tour-open ngx-guided-tour .tour-step h2.tour-title{text-align:center}body.tour-open ngx-guided-tour .tour-step h3.tour-title{text-align:center}body.tour-open ngx-guided-tour .guided-tour-spotlight-overlay{box-shadow:0 0 0 9999px #0000004d,0 0 1.5rem #00000026;border-radius:5px}body.tour-open ngx-guided-tour.lat-coding-tour h3.tour-title,body.tour-open ngx-guided-tour.lat-coding-tour h2.tour-title,body.tour-open ngx-guided-tour.lat-coding-tour .tour-content{text-align:left}body.tour-open ngx-guided-tour.lat-coding-tour .tour-content{padding-bottom:24px}body.tour-open ngx-guided-tour.lat-coding-tour .tour-buttons button.skip-button{background:#fff;border:1px solid #000000}body.tour-open ngx-guided-tour.lat-coding-tour .tour-buttons button.next-button{background-color:var(--company-color, #D410AA)}body.tour-open[theme=dark] ngx-guided-tour .tour-step .tour-block{box-shadow:none}body.tour-open[theme=dark] ngx-guided-tour .guided-tour-spotlight-overlay{box-shadow:0 0 0 9999px #000000a6,0 0 1.5rem #00000080;border-radius:5px}body.theme-dark ngx-guided-tour .tour-step .tour-block{box-shadow:none}body.theme-dark ngx-guided-tour .guided-tour-spotlight-overlay{box-shadow:0 0 0 9999px #000000a6,0 0 1.5rem #00000080;border-radius:5px}body .tgo-test-code{display:flex;flex:1;justify-content:center}body .tgo-test-code tgo-question,body .tgo-test-code tgo-micro-test-library-shell-container{display:flex}body[theme=dark] .micro-question-code .coding-lib ui-dropdown .mat-mdc-text-field-wrapper,body[theme=dark] .micro-question-code .coding-lib ui-field .mat-mdc-text-field-wrapper{background-color:transparent}.micro-question-code{display:flex}.micro-question-code .coding-lib{display:block;height:100%}\n"] }]
440
- }], propDecorators: { assessment: [{
441
- type: Input
442
- }], question: [{
443
- type: Input,
444
- args: [{ required: true }]
445
- }], test: [{
446
- type: Input,
447
- args: [{ required: true }]
448
- }], expirationObservable: [{
449
- type: Input
450
- }], completeObservable: [{
451
- type: Input
452
- }], isDemo: [{
453
- type: Input
454
- }], validationStatusChanged: [{
455
- type: Output
456
- }], antiCheatingConfigurationChanged: [{
457
- type: Output
458
- }], fullscreenChanged: [{
459
- type: Output
460
- }], themeChanged: [{
461
- type: Output
462
- }], codingFullscreenChanged: [{
463
- type: Output
464
- }], navigationButtonStateChanged: [{
465
- type: Output
466
- }], configurationStateChanged: [{
467
- type: Output
468
- }], submissionStateChanged: [{
469
- type: Output
470
- }], loadingStateChanged: [{
471
- type: Output
472
- }], hostClass: [{
473
- type: HostBinding,
474
- args: ['class']
475
- }] } });
476
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGdvLWNvZGluZy10ZXN0LWNhbmRpZGF0ZS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3Rnby1jb2RpbmctdGVzdC9zcmMvbGliL2NvbXBvbmVudHMvdGdvLWNvZGluZy10ZXN0LWNhbmRpZGF0ZS12aWV3L3Rnby1jb2RpbmctdGVzdC1jYW5kaWRhdGUtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy90Z28tY29kaW5nLXRlc3Qvc3JjL2xpYi9jb21wb25lbnRzL3Rnby1jb2RpbmctdGVzdC1jYW5kaWRhdGUtdmlldy90Z28tY29kaW5nLXRlc3QtY2FuZGlkYXRlLXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsU0FBUyxFQUNULFFBQVEsRUFDUixZQUFZLEVBQ1osV0FBVyxFQUNYLE1BQU0sRUFDTixLQUFLLEVBR0wsTUFBTSxFQUNOLE1BQU0sRUFDTixpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRyxPQUFPLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JFLE9BQU8sRUFDTCxVQUFVLEVBRVYsa0JBQWtCLEVBQ2xCLGlCQUFpQixFQU1qQixlQUFlLEVBR2YsWUFBWSxFQUNaLHdCQUF3QixHQUN6QixNQUFNLDhCQUE4QixDQUFDO0FBQ3RDLE9BQU8sRUFFTCxzQkFBc0IsRUFDdEIscUJBQXFCLEVBQ3JCLGFBQWEs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WixxQkFBcUI7d0JBQ3JCLGVBQWU7d0JBRWYsMkNBQTJDO3dCQUMzQyxVQUFVLEVBQUUsc0RBQXNEO3FCQUNuRTs4QkFrQlEsVUFBVTtzQkFBbEIsS0FBSztnQkFDcUIsUUFBUTtzQkFBbEMsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBQ0UsSUFBSTtzQkFBOUIsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBQ2hCLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUVJLHVCQUF1QjtzQkFBaEMsTUFBTTtnQkFDRyxnQ0FBZ0M7c0JBQXpDLE1BQU07Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csdUJBQXVCO3NCQUFoQyxNQUFNO2dCQUNHLDRCQUE0QjtzQkFBckMsTUFBTTtnQkFDRyx5QkFBeUI7c0JBQWxDLE1BQU07Z0JBQ0csc0JBQXNCO3NCQUEvQixNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFFZSxTQUFTO3NCQUE5QixXQUFXO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBjb21wdXRlZCxcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0QmluZGluZyxcbiAgaW5qZWN0LFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgc2lnbmFsLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IHRyYW5zbGF0ZSwgVFJBTlNMT0NPX1NDT1BFLCBUcmFuc2xvY29Nb2R1bGUsIFRyYW5zbG9jb1NlcnZpY2UgfSBmcm9tICdAbmduZWF0L3RyYW5zbG9jbyc7XG5pbXBvcnQgeyBVbnRpbERlc3Ryb3ksIHVudGlsRGVzdHJveWVkIH0gZnJvbSAnQG5nbmVhdC91bnRpbC1kZXN0cm95JztcbmltcG9ydCB7XG4gIEFwaVNlcnZpY2UsXG4gIEFzc2Vzc21lbnQsXG4gIEVudmlyb25tZW50U2VydmljZSxcbiAgZ2V0QXZhaWxhYmxlTGFuZ3MsXG4gIElBbnRpQ2hlYXRpbmdTdGF0ZSxcbiAgSUNvbmZpZ3VyYXRpb25TdGF0ZSxcbiAgSU5hdmlnYXRpb25CdXR0b25TdGF0ZSxcbiAgSVF1ZXN0aW9uRGF0YUNvbnRyYWN0LFxuICBJU3VibWlzc2lvblN0YXRlLFxuICBNaXhwYW5lbFNlcnZpY2UsXG4gIFF1ZXN0aW9uLFxuICBUZXN0UmVzdWx0UmVhZCxcbiAgVGhlbWVTZXJ2aWNlLFxuICBUcmFuc2xvY29MYXp5TW9kdWxlVXRpbHMsXG59IGZyb20gJ0B0ZXN0Z29yaWxsYS90Z28tdGVzdC1zaGFyZWQnO1xuaW1wb3J0IHtcbiAgQXBwbGljYXRpb25UaGVtZSxcbiAgQ29uZmlybURpYWxvZ0NvbXBvbmVudCxcbiAgRGlhbG9nQ29tcG9uZW50TW9kdWxlLFxuICBEaWFsb2dTZXJ2aWNlLFxuICBTbmFja2JhckNvbXBvbmVudE1vZHVsZSxcbn0gZnJvbSAnQHRlc3Rnb3JpbGxhL3Rnby11aSc7XG5pbXBvcnQgeyBHdWlkZWRUb3VyTW9kdWxlLCBHdWlkZWRUb3VyU2VydmljZSB9IGZyb20gJ25neC1ndWlkZWQtdG91cic7XG5pbXBvcnQgeyBpbnRlcnZhbCwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBzd2l0Y2hNYXAsIHRha2UsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgQ29kaW5nVGVzdHNSZXN1bHRzTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvY29kZXJ1bm5lci1leGVjdXRpb24tcmVzdWx0cyc7XG5pbXBvcnQgeyBMQVRMYW5ndWFnZXMgfSBmcm9tICcuLi8uLi9tb2RlbHMvbGF0LWxhbmd1YWdlcyc7XG5pbXBvcnQgeyBNb2RlcyB9IGZyb20gJy4uLy4uL21vZGVscy9tb2RlJztcbmltcG9ydCB7IFBhc3RlRGF0YSB9IGZyb20gJy4uLy4uL21vZGVscy9wYXN0ZS1kYXRhJztcbmltcG9ydCB7XG4gIFByb2dyYW1taW5nTGFuZ3VhZ2UsXG4gIFByb2dyYW1taW5nTGFuZ3VhZ2VWZXJzaW9uZWQsXG59IGZyb20gJy4uLy4uL21vZGVscy9wcm9ncmFtbWluZy1sYW5ndWFnZSc7XG5pbXBvcnQgeyBFeGFtcGxlVGVzdENhc2UsIFNxbFRlc3RDYXNlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3Rlc3QtY2FzZXMnO1xuaW1wb3J0IHsgVGhlbWVzIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3RoZW1lJztcbmltcG9ydCB7IFJPT1RfVFJBTlNMQVRJT05TX1NDT1BFIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3RyYW5zbGF0aW9ucyc7XG5pbXBvcnQgeyBWaWV3TW9kZSB9IGZyb20gJy4uLy4uL21vZGVscy92aWV3LW1vZGUnO1xuaW1wb3J0IHtcbiAgQ2FuZGlkYXR1cmVBcGlTZXJ2aWNlLFxuICBDb2RlcnVubmVyQXBpU2VydmljZSxcbiAgQ29kaW5nVGVzdFNlcnZpY2UsXG4gIENvZGluZ1Rlc3RUb3VyTW9kZSxcbiAgQ29kaW5nVGVzdFRvdXJTZXJ2aWNlLFxufSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jYW5kaWRhdGUtY29kaW5nLXRlc3Qtc2VydmljZXMnO1xuaW1wb3J0IHsgQ29kaW5nVGVzdENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb2RpbmctdGVzdC1jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBMaWJDb2RpbmdUZXN0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2xpYi1jb2RpbmctdGVzdC5zZXJ2aWNlJztcbmltcG9ydCB7IENvZGVFZGl0b3JMYW5ndWFnZXMgfSBmcm9tICcuLi9jb2RlLWVkaXRvci9oZWxwZXJzL2NvZGUtZWRpdG9yLWhlbHBlci5tb2RlbCc7XG5pbXBvcnQgeyBUZ29Db2RpbmdUZXN0Q29tcG9uZW50IH0gZnJvbSAnLi4vdGdvLWNvZGluZy10ZXN0L3Rnby1jb2RpbmctdGVzdC5jb21wb25lbnQnO1xuXG5AVW50aWxEZXN0cm95KClcbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogJ3Rnby1jb2RpbmctdGVzdC1jYW5kaWRhdGUtdmlldycsXG4gIHRlbXBsYXRlVXJsOiAnLi90Z28tY29kaW5nLXRlc3QtY2FuZGlkYXRlLXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90Z28tY29kaW5nLXRlc3QtY2FuZGlkYXRlLXZpZXcuY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgaW1wb3J0czogW1xuICAgIFRyYW5zbG9jb01vZHVsZSxcbiAgICBEaWFsb2dDb21wb25lbnRNb2R1bGUsXG4gICAgU25hY2tiYXJDb21wb25lbnRNb2R1bGUsXG4gICAgVGdvQ29kaW5nVGVzdENvbXBvbmVudCxcbiAgICBHdWlkZWRUb3VyTW9kdWxlLFxuICAgIENvbW1vbk1vZHVsZSxcbiAgICBSb3V0ZXJNb2R1bGUsXG4gIF0sXG4gIHByb3ZpZGVyczogW1xuICAgIFRyYW5zbG9jb0xhenlNb2R1bGVVdGlscy5nZXRTY29wZVByb3ZpZGVyKFxuICAgICAgJ3Rnby1jb2RpbmctdGVzdCcsXG4gICAgICBnZXRBdmFpbGFibGVMYW5ncygpLFxuICAgICAgUk9PVF9UUkFOU0xBVElPTlNfU0NPUEUsXG4gICAgICAobGFuZzogc3RyaW5nKSA9PiB7XG4gICAgICAgIC8vIEZldGNoIGZyb20gYXBwIGFzc2V0czsgZGVtbyBhcHAgY29waWVzIHRoZSBsaWJyYXJ5IGFzc2V0cyB0b1xuICAgICAgICAvLyAvYXNzZXRzL3Rnby1jb2RpbmctdGVzdCB2aWEgcHJvamVjdC5qc29uLlxuICAgICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKGBhc3NldHMvdGdvLWNvZGluZy10ZXN0L2kxOG4vJHtsYW5nfS5qc29uYCwgZG9jdW1lbnQuYmFzZVVSSSkuaHJlZjtcbiAgICAgICAgcmV0dXJuIGZldGNoKHVybCkudGhlbihyZXMgPT4gcmVzLmpzb24oKSk7XG4gICAgICB9XG4gICAgKSxcbiAgICBFbnZpcm9ubWVudFNlcnZpY2UsXG4gICAgQ29kZXJ1bm5lckFwaVNlcnZpY2UsXG4gICAgQ29kaW5nVGVzdFNlcnZpY2UsXG4gICAgQ29kaW5nVGVzdFRvdXJTZXJ2aWNlLFxuICAgIEd1aWRlZFRvdXJTZXJ2aWNlLFxuICAgIFRoZW1lU2VydmljZSxcbiAgICBDYW5kaWRhdHVyZUFwaVNlcnZpY2UsXG4gICAgTWl4cGFuZWxTZXJ2aWNlLFxuXG4gICAgLy8gdXNlIE1vY2tlZEFwaVNlcnZpY2UgZm9yIGxvY2FsIGRlbW8gT05MWVxuICAgIEFwaVNlcnZpY2UsIC8veyBwcm92aWRlOiBBcGlTZXJ2aWNlLCB1c2VDbGFzczogTW9ja2VkQXBpU2VydmljZSB9LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBUZ29Db2RpbmdUZXN0Q2FuZGlkYXRlVmlld0NvbXBvbmVudFxuICBpbXBsZW1lbnRzIE9uSW5pdCwgSVF1ZXN0aW9uRGF0YUNvbnRyYWN0LCBPbkRlc3Ryb3lcbntcbiAgcHJpdmF0ZSByZWFkb25seSBkaWFsb2dTZXJ2aWNlID0gaW5qZWN0KERpYWxvZ1NlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0aW9uU2NvcGUgPSBpbmplY3QoVFJBTlNMT0NPX1NDT1BFKTtcbiAgcHJpdmF0ZSByZWFkb25seSBjYW5kaWRhdHVyZUFwaVNlcnZpY2UgPSBpbmplY3QoQ2FuZGlkYXR1cmVBcGlTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBjb2RpbmdUZXN0VG91clNlcnZpY2UgPSBpbmplY3QoQ29kaW5nVGVzdFRvdXJTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBsaWJDb2RpbmdUZXN0U2VydmljZSA9IGluamVjdChMaWJDb2RpbmdUZXN0U2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZW52aXJvbm1lbnRTZXJ2aWNlID0gaW5qZWN0KEVudmlyb25tZW50U2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29kaW5nVGVzdFNlcnZpY2UgPSBpbmplY3QoQ29kaW5nVGVzdFNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbG9jb1NlcnZpY2UgPSBpbmplY3QoVHJhbnNsb2NvU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgdGhlbWVTZXJ2aWNlID0gaW5qZWN0KFRoZW1lU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXBpU2VydmljZSA9IGluamVjdChBcGlTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSByb3V0ZSA9IGluamVjdChBY3RpdmF0ZWRSb3V0ZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29kaW5nVGVzdENvbmZpZ1NlcnZpY2UgPSBpbmplY3QoQ29kaW5nVGVzdENvbmZpZ1NlcnZpY2UpO1xuXG4gIEBJbnB1dCgpIGFzc2Vzc21lbnQ/OiBBc3Nlc3NtZW50O1xuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBxdWVzdGlvbiE6IFF1ZXN0aW9uO1xuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSB0ZXN0ITogVGVzdFJlc3VsdFJlYWQ7XG4gIEBJbnB1dCgpIGV4cGlyYXRpb25PYnNlcnZhYmxlPzogT2JzZXJ2YWJsZTx2b2lkPjtcbiAgQElucHV0KCkgY29tcGxldGVPYnNlcnZhYmxlPzogT2JzZXJ2YWJsZTx2b2lkPjtcbiAgQElucHV0KCkgaXNEZW1vPzogYm9vbGVhbjtcblxuICBAT3V0cHV0KCkgdmFsaWRhdGlvblN0YXR1c0NoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIEBPdXRwdXQoKSBhbnRpQ2hlYXRpbmdDb25maWd1cmF0aW9uQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8SUFudGlDaGVhdGluZ1N0YXRlIHwgbnVsbD4oKTtcbiAgQE91dHB1dCgpIGZ1bGxzY3JlZW5DaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICBAT3V0cHV0KCkgdGhlbWVDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxBcHBsaWNhdGlvblRoZW1lPigpO1xuICBAT3V0cHV0KCkgY29kaW5nRnVsbHNjcmVlbkNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gIEBPdXRwdXQoKSBuYXZpZ2F0aW9uQnV0dG9uU3RhdGVDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxJTmF2aWdhdGlvbkJ1dHRvblN0YXRlIHwgbnVsbD4oKTtcbiAgQE91dHB1dCgpIGNvbmZpZ3VyYXRpb25TdGF0ZUNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPElDb25maWd1cmF0aW9uU3RhdGUgfCBudWxsPigpO1xuICBAT3V0cHV0KCkgc3VibWlzc2lvblN0YXRlQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8SVN1Ym1pc3Npb25TdGF0ZSB8IG51bGw+KCk7XG4gIEBPdXRwdXQoKSBsb2FkaW5nU3RhdGVDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcycpIGhvc3RDbGFzcyA9ICdtaWNyby1xdWVzdGlvbi1jb2RlJztcblxuICBwcml2YXRlIHJlYWRvbmx5IHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gIGluaXRDb2RlID0gJyc7XG4gIHZpZXdNb2RlcyA9IFZpZXdNb2RlO1xuICBtb2RlOiBNb2RlcyA9IE1vZGVzLlJ1bm5pbmc7XG4gIGNvbXBhbnlDb2xvciA9IHRoaXMudGhlbWVTZXJ2aWNlLmdldENvbXBhbnlDb2xvcigpO1xuICBpbml0Q29kZXNNYXAgPSBuZXcgTWFwPENvZGVFZGl0b3JMYW5ndWFnZXMsIHN0cmluZz4oKTtcbiAgbGFuZ3VhZ2VzID0gc2lnbmFsPExBVExhbmd1YWdlcz4oW10pO1xuICBjb2RpbmdMaWJUcmFuc2xhdGlvbnMgPSBzaWduYWw8eyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfT4oe30pO1xuICByYXdMYW5ndWFnZXM6IFByb2dyYW1taW5nTGFuZ3VhZ2VbXSA9IFtdO1xuICBjdXJyZW50TGFuZ3VhZ2U/OiBzdHJpbmc7XG4gIGlzU1FMID0gZmFsc2U7XG4gIGlzTEFUID0gdHJ1ZTtcbiAgY29kZSA9ICcnO1xuICBjb2RpbmdUZXN0UmVzdWx0cz86IENvZGluZ1Rlc3RzUmVzdWx0c01vZGVsO1xuICB0ZXN0UmVzdWx0c0xvYWRpbmcgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmNvZGluZ1Rlc3RTZXJ2aWNlLmlzVGVzdFJlc3VsdHNMb2FkaW5nKCkpO1xuICBleGFtcGxlVGVzdENhc2VzOiBFeGFtcGxlVGVzdENhc2VbXSA9IFtdO1xuICBhY3RpdmVHdWlkZWRUb3VySWQkID0gdGhpcy5jb2RpbmdUZXN0VG91clNlcnZpY2UuYWN0aXZlR3VpZGVkVG91cklkJDtcbiAgZmlyc3RUZXN0UnVuQ29tcGxldGUgPSBmYWxzZTtcbiAgY2Fub3B5VWlUaGVtZTogQXBwbGljYXRpb25UaGVtZSA9ICdsaWdodCc7XG5cbiAgcHJpdmF0ZSB3YXNUb3VyU2hvd24gPSBmYWxzZTtcblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMudGVzdD8uaXNfcHJldmlld19tb2RlKSB7XG4gICAgICB0aGlzLmFudGlDaGVhdGluZ0NvbmZpZ3VyYXRpb25DaGFuZ2VkLmVtaXQoe1xuICAgICAgICBmdWxsc2NyZWVuVHJhY2tpbmc6IGZhbHNlLFxuICAgICAgICBtb3VzZUV2ZW50VHJhY2tpbmc6IGZhbHNlLFxuICAgICAgICBzbmFwc2hvdHNUcmFja2luZzogZmFsc2UsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5zZXR1cFN0YXRlKCk7XG4gICAgdGhpcy5oYW5kbGVHdWlkZWRUb3VyKCk7XG5cbiAgICBpZiAoIXRoaXMudGVzdD8uaXNfcHJldmlld19tb2RlKSB7XG4gICAgICB0aGlzLmFudGlDaGVhdGluZ0NvbmZpZ3VyYXRpb25DaGFuZ2VkLmVtaXQoe1xuICAgICAgICBmdWxsc2NyZWVuVHJhY2tpbmc6IHRydWUsXG4gICAgICAgIG1vdXNlRXZlbnRUcmFja2luZzogdHJ1ZSxcbiAgICAgICAgc25hcHNob3RzVHJhY2tpbmc6IHRydWUsXG4gICAgICB9KTtcblxuICAgICAgdGhpcy5zZXR1cEF1dG9zYXZlRXZlbnQoKTtcbiAgICB9XG5cbiAgICBjb25zdCBpc05leHRRdWVzdGlvbkRpc2FibGVkID0gIXRoaXMudGVzdD8uaXNfcHJldmlld19tb2RlO1xuXG4gICAgdGhpcy5jb25maWd1cmF0aW9uU3RhdGVDaGFuZ2VkLmVtaXQoe1xuICAgICAgaXNTYXZpbmdRdWVzdGlvbkRpc2FibGVkOiBpc05leHRRdWVzdGlvbkRpc2FibGVkLFxuICAgIH0pO1xuXG4gICAgdGhpcy5uYXZpZ2F0aW9uQnV0dG9uU3RhdGVDaGFuZ2VkLmVtaXQoe1xuICAgICAgZGlzYWJsZWQ6IGlzTmV4dFF1ZXN0aW9uRGlzYWJsZWQsXG4gICAgfSk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbi5hZGQoXG4gICAgICB0aGlzLmV4cGlyYXRpb25PYnNlcnZhYmxlPy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLmNsZWFyU2F2ZWRDb2RlKCk7XG4gICAgICAgIGlmICghdGhpcy50ZXN0Py5pc19wcmV2aWV3X21vZGUpIHtcbiAgICAgICAgICB0aGlzLmNsZWFyTGFzdExhbmd1YWdlU2VsZWN0ZWQoKTtcbiAgICAgICAgICB0aGlzLnN1Ym1pdENvZGUoKTtcbiAgICAgICAgICB0aGlzLmVuYWJsZU5leHRCdXR0b24oKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgdGhpcy5jb21wbGV0ZU9ic2VydmFibGU/LnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy50ZXN0Py5pc19wcmV2aWV3X21vZGUpIHtcbiAgICAgICAgICB0aGlzLm9wZW5TYXZlRGlhbG9nKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jbGVhclNhdmVkQ29kZSgpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG5cbiAgICBpZiAoIXRoaXMuaXNTUUwpIHtcbiAgICAgIHRoaXMubG9hZEF2YWlsYWJsZUxhbmd1YWdlcygpO1xuICAgICAgdGhpcy5zZXRUZXN0Q2FzZXMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXRTcWxUZXN0Q2FzZXMoKTtcbiAgICAgIHRoaXMuc2V0U3FsTGFuZygpO1xuICAgICAgdGhpcy5zZXRTcWxJbml0Q29kZSgpO1xuICAgICAgdGhpcy5sb2FkaW5nU3RhdGVDaGFuZ2VkLmVtaXQoZmFsc2UpO1xuICAgIH1cbiAgICB0aGlzLnNldExpc3RlbmVycygpO1xuICB9XG5cbiAgb3BlblNhdmVEaWFsb2coKTogdm9pZCB7XG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4oQ29uZmlybURpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgYXBwbGljYXRpb25UaGVtZTogdGhpcy5jYW5vcHlVaVRoZW1lLFxuICAgICAgc2l6ZTogJ3NtYWxsJyxcbiAgICAgIHBhbmVsQ2xhc3M6ICcnLFxuICAgICAgZXh0cmFEYXRhOiB7XG4gICAgICAgIHRpdGxlOiB0cmFuc2xhdGUoJ0NPRElOR19RVUVTVElPTi5NT0RBTFMuRklOSVNIX1RFU1QuVElUTEUnKSA/PyAnJyxcbiAgICAgICAgbWVzc2FnZTogdHJhbnNsYXRlKCdDT0RJTkdfUVVFU1RJT04uTU9EQUxTLkZJTklTSF9URVNULk1FU1NBR0UnKSA/PyAnJyxcbiAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6IHRyYW5zbGF0ZSgnQ09ESU5HX1FVRVNUSU9OLk1PREFMUy5GSU5JU0hfVEVTVC5TVUJNSVQnKSA/PyAnJyxcbiAgICAgICAgY2FuY2VsQnV0dG9uVGV4dDogdHJhbnNsYXRlKCdDT0RJTkdfUVVFU1RJT04uTU9EQUxTLkZJTklTSF9URVNULkNBTkNFTCcpID8/ICcnLFxuICAgICAgICBjb2xvcjogdGhpcy5jb21wYW55Q29sb3IsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY2xlYXJTYXZlZENvZGUoKTtcbiAgICAgIHRoaXMuY2xlYXJMYXN0TGFuZ3VhZ2VTZWxlY3RlZCgpO1xuICAgICAgdGhpcy5zdWJtaXRDb2RlKCk7XG4gICAgICB0aGlzLmVuYWJsZU5leHRCdXR0b24oKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJMYXN0TGFuZ3VhZ2VTZWxlY3RlZCgpOiB2b2lkIHtcbiAgICB0aGlzLmxpYkNvZGluZ1Rlc3RTZXJ2aWNlLmNsZWFyTGFzdExhbmd1YWdlU2VsZWN0ZWQoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJTYXZlZENvZGUoKSB7XG4gICAgdGhpcy5saWJDb2RpbmdUZXN0U2VydmljZS50cmlnZ2VyQ2xlYXJTYXZlZENvZGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgc3VibWl0Q29kZSgpIHtcbiAgICBpZiAodGhpcy5jb2RlKSB7XG4gICAgICB0aGlzLnN1Ym1pc3Npb25TdGF0ZUNoYW5nZWQ/LmVtaXQoe1xuICAgICAgICB0ZXh0OiB0aGlzLmNvZGUsXG4gICAgICAgIGxhbmd1YWdlOiB0aGlzLmdldFZlcnNpb25lZExhbmd1YWdlKCksXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFZlcnNpb25lZExhbmd1YWdlKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgbGFuZ3VhZ2UgPSB0aGlzLmN1cnJlbnRMYW5ndWFnZTtcblxuICAgIGlmICghbGFuZ3VhZ2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc1NRTCkge1xuICAgICAgcmV0dXJuIFByb2dyYW1taW5nTGFuZ3VhZ2VWZXJzaW9uZWQuU1FMaXRlO1xuICAgIH1cblxuICAgIHJldHVybiBgJHtsYW5ndWFnZX0tJHt0aGlzLmxpYkNvZGluZ1Rlc3RTZXJ2aWNlLmdldFZlcnNpb24oKX1gO1xuICB9XG5cbiAgcHJpdmF0ZSBlbmFibGVOZXh0QnV0dG9uKCk6IHZvaWQge1xuICAgIHRoaXMuY29uZmlndXJhdGlvblN0YXRlQ2hhbmdlZC5lbWl0KHtcbiAgICAgIGlzU2F2aW5nUXVlc3Rpb25EaXNhYmxlZDogZmFsc2UsXG4gICAgfSk7XG4gIH1cblxuICBsYW5ndWFnZUNoYW5nZShzZWxlY3RlZExhbmdOYW1lOiBDb2RlRWRpdG9yTGFuZ3VhZ2VzKSB7XG4gICAgY29uc3Qgc2VsZWN0ZWRMYW5nID0gdGhpcy5yYXdMYW5ndWFnZXMuZmlsdGVyKFxuICAgICAgbGFuZ3VhZ2UgPT4gbGFuZ3VhZ2UubmFtZSA9PT0gc2VsZWN0ZWRMYW5nTmFtZVxuICAgIClbMF07XG4gICAgdGhpcy5jb2RpbmdUZXN0U2VydmljZS5oYW5kbGVMYW5ndWFnZUNoYW5nZU1vZGFsKFxuICAgICAgdGhpcy5xdWVzdGlvbi5pZCxcbiAgICAgIHNlbGVjdGVkTGFuZyxcbiAgICAgIHRoaXMuY2Fub3B5VWlUaGVtZSxcbiAgICAgIHRoaXMuY29tcGFueUNvbG9yXG4gICAgKTtcbiAgfVxuXG4gIHVwZGF0ZUNvZGUoY29kZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5jb2RlID0gY29kZTtcbiAgfVxuXG4gIHJ1blRlc3QoKTogdm9pZCB7XG4gICAgdGhpcy5jb2RpbmdUZXN0U2VydmljZS5ydW5UZXN0KFxuICAgICAgdGhpcy5xdWVzdGlvbi5pZCxcbiAgICAgIHRoaXMuY29kZSxcbiAgICAgIHRoaXMuaXNMQVQsXG4gICAgICB0aGlzLmlzU1FMLFxuICAgICAgZmFsc2UsXG4gICAgICAhIXRoaXMudGVzdC5pc19wcmV2aWV3X21vZGUsXG4gICAgICB0aGlzLnF1ZXN0aW9uLnF1ZXN0aW9uX2lkLFxuICAgICAgdGhpcy50ZXN0LmlkLFxuICAgICAgdGhpcy50ZXN0XG4gICAgKTtcblxuICAgIGlmICghdGhpcy5maXJzdFRlc3RSdW5Db21wbGV0ZSkge1xuICAgICAgdGhpcy5uYXZpZ2F0aW9uQnV0dG9uU3RhdGVDaGFuZ2VkLmVtaXQoe1xuICAgICAgICBkaXNhYmxlZDogZmFsc2UsXG4gICAgICB9KTtcblxuICAgICAgdGhpcy5maXJzdFRlc3RSdW5Db21wbGV0ZSA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgc2NyZWVuc2hvdFBhc3RlKGV2ZW50OiBQYXN0ZURhdGEpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQudHlwZSAhPT0gJ3Bhc3RlJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY29kaW5nVGVzdFNlcnZpY2VcbiAgICAgIC5zZW5kQ29weXBhc3RlRXZlbnQkKHRoaXMuY29kZSwgZXZlbnQuZGF0YSwgdGhpcy5xdWVzdGlvbi5pZClcbiAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwcml2YXRlIHNldHVwQXV0b3NhdmVFdmVudCgpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbi5hZGQoXG4gICAgICBpbnRlcnZhbCg1MDAwKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICB1bnRpbERlc3Ryb3llZCh0aGlzKSxcbiAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5jb2RpbmdUZXN0U2VydmljZS5zZW5kQXV0b3NhdmVFdmVudCQodGhpcy5jb2RlLCB0aGlzLnF1ZXN0aW9uLmlkKSlcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cFN0YXRlKCk6IHZvaWQge1xuICAgIHRoaXMuc2V0QXBpUGFyYW1zKCk7XG4gICAgdGhpcy5zZXRDb2RpbmdMaWJUcmFuc2xhdGlvbnMoKTtcbiAgICB0aGlzLnNldElzU1FMKCk7XG4gICAgdGhpcy5zZXRJc0xhdCgpO1xuICAgIHRoaXMuc2V0TW9kZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRDb2RpbmdMaWJUcmFuc2xhdGlvbnMoKSB7XG4gICAgLy8gVFJBTlNMT0NPX1NDT1BFIGlzIHBhc3NlZCBoZXJlIHRvIG1ha2Ugc3VyZSB0aGF0IHRyYW5zbGF0aW9uIHNjb3BlIGlzIHJlc29sdmVkIGJ5IHRoZSBsaWJyYXJ5XG4gICAgdGhpcy50cmFuc2xvY29TZXJ2aWNlXG4gICAgICAuc2VsZWN0VHJhbnNsYXRlT2JqZWN0KGBDT0RJTkdfTElCYCwge30sIHRoaXMudHJhbnNsYXRpb25TY29wZSBhcyBzdHJpbmcpXG4gICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgLnN1YnNjcmliZSh0cmFuc2xhdGlvbnMgPT4ge1xuICAgICAgICB0aGlzLmNvZGluZ0xpYlRyYW5zbGF0aW9ucy5zZXQodHJhbnNsYXRpb25zKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRBcGlQYXJhbXMoKTogdm9pZCB7XG4gICAgY29uc3QgaW52aXRhdGlvblV1aWQgPSB0aGlzLnJvdXRlLnNuYXBzaG90LmZpcnN0Q2hpbGQ/LnVybFswXS5wYXRoIHx8ICcnO1xuICAgIGNvbnN0IGNvbnRlbnRMYW5ndWFnZSA9IHRoaXMuYXNzZXNzbWVudD8ubG9jYWxlID8/ICdlbic7XG4gICAgY29uc3QgYXBpVXJsID0gdGhpcy5jb2RpbmdUZXN0Q29uZmlnU2VydmljZS5nZXRBcGlVcmwoKTtcblxuICAgIHRoaXMuYXBpU2VydmljZS5zZXRQYXJhbXMoaW52aXRhdGlvblV1aWQsIGNvbnRlbnRMYW5ndWFnZSwgUk9PVF9UUkFOU0xBVElPTlNfU0NPUEUsIGFwaVVybCk7XG4gIH1cblxuICBwcml2YXRlIHNldElzU1FMKCk6IHZvaWQge1xuICAgIHRoaXMuaXNTUUwgPSB0aGlzLnF1ZXN0aW9uPy5jb250ZXh0LmNvZGVfbGFuZ3VhZ2UgPT09ICdzcWwnO1xuICAgIHRoaXMuY29kaW5nVGVzdFNlcnZpY2Uuc2V0SXNTUUxUZXN0KHRoaXMuaXNTUUwpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRTcWxJbml0Q29kZSgpOiB2b2lkIHtcbiAgICB0aGlzLmluaXRDb2RlID0gdGhpcy5xdWVzdGlvbj8uY29udGV4dC5pbml0aWFsX2NvZGU7XG4gIH1cblxuICBwcml2YXRlIHNldFNxbExhbmcoKTogdm9pZCB7XG4gICAgY29uc3Qgc3FsTGFuZ3VhZ2UgPSB0aGlzLnF1ZXN0aW9uPy5jb250ZXh0LmNvZGVfbGFuZ3VhZ2UgYXMgQ29kZUVkaXRvckxhbmd1YWdlcztcbiAgICB0aGlzLmxhbmd1YWdlcy5zZXQoW1xuICAgICAge1xuICAgICAgICBsYWJlbDogJ25vbkxBVCcsXG4gICAgICAgIHZhbHVlOiBzcWxMYW5ndWFnZSxcbiAgICAgIH0sXG4gICAgXSk7XG4gICAgdGhpcy5jdXJyZW50TGFuZ3VhZ2UgPSBzcWxMYW5ndWFnZTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0SXNMYXQoKTogdm9pZCB7XG4gICAgLy8gdG9kbzogYWRkIHJlc3BvbnNlIGZpZWxkIGlmIHBvc3NpYmxlID9cbiAgICAvLyB0aGlzLmlzTEFUID0gdGhpcy50ZXN0Py5pc19sYW5ndWFnZV9hZ25vc3RpY190ZXN0ID8/IGZhbHNlO1xuICAgIHRoaXMuaXNMQVQgPSAhdGhpcy5pc1NRTDtcbiAgfVxuXG4gIHByaXZhdGUgc2V0TW9kZSgpOiB2b2lkIHtcbiAgICB0aGlzLm1vZGUgPSB0aGlzLnRlc3Q/LmlzX3ByZXZpZXdfbW9kZSA/IE1vZGVzLlByZXZpZXcgOiBNb2Rlcy5SdW5uaW5nO1xuICB9XG5cbiAgcHJpdmF0ZSBsaXN0ZW5HdWlkZWRUb3VyU3RhcnQoKTogdm9pZCB7XG4gICAgdGhpcy5saWJDb2RpbmdUZXN0U2VydmljZS5zdGFydEd1aWRlZFRvdXIkLnBpcGUodW50aWxEZXN0cm95ZWQodGhpcykpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBjb25zdCBndWlkZWRUb3VyTW9kZSA9IHRoaXMudGVzdD8uaXNfcHJldmlld19tb2RlXG4gICAgICAgID8gQ29kaW5nVGVzdFRvdXJNb2RlLlByYWN0aWNlUXVlc3Rpb25cbiAgICAgICAgOiBDb2RpbmdUZXN0VG91ck1vZGUuUmVhbFF1ZXN0aW9uO1xuXG4gICAgICB0aGlzLmNvZGluZ1Rlc3RUb3VyU2VydmljZS5pbml0KGd1aWRlZFRvdXJNb2RlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlR3VpZGVkVG91cigpIHtcbiAgICBpZiAoIXRoaXMuZW52aXJvbm1lbnRTZXJ2aWNlLmlzTW9iaWxlICYmICF0aGlzLndhc1RvdXJTaG93biAmJiB0aGlzLnRlc3Q/LmlzX3ByZXZpZXdfbW9kZSkge1xuICAgICAgY29uc3QgZGVsYXlGb3JHdWlkZWRUb3VyID0gMTUwMDtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmNvZGluZ1Rlc3RUb3VyU2VydmljZS5pbml0KENvZGluZ1Rlc3RUb3VyTW9kZS5QcmFjdGljZVF1ZXN0aW9uKTtcbiAgICAgICAgdGhpcy53YXNUb3VyU2hvd24gPSB0cnVlO1xuICAgICAgfSwgZGVsYXlGb3JHdWlkZWRUb3VyKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldEFsbExhbmd1YWdlcygpOiBQcm9ncmFtbWluZ0xhbmd1YWdlW10ge1xuICAgIGNvbnN0IGJvaWxlcnBsYXRlcyA9IHRoaXMucXVlc3Rpb24/LmNvbnRleHQuYm9pbGVycGxhdGVzID8/IFtdO1xuICAgIHJldHVybiBib2lsZXJwbGF0ZXMubWFwKCh7IHByb2dyYW1taW5nX2xhbmd1YWdlIH0pID0+IHByb2dyYW1taW5nX2xhbmd1YWdlKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZEF2YWlsYWJsZUxhbmd1YWdlcygpOiB2b2lkIHtcbiAgICB0aGlzLmNhbmRpZGF0dXJlQXBpU2VydmljZVxuICAgICAgLmdldEF2YWlsYWJsZUxhbmd1YWdlcyQoKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2UoMSksXG4gICAgICAgIHRhcChhdmFpbGFibGVMYW5nc0lkcyA9PiB7XG4gICAgICAgICAgY29uc3QgbGFuZ3VhZ2VzID0gdGhpcy5nZXRBbGxMYW5ndWFnZXMoKTtcbiAgICAgICAgICBjb25zdCBhcmVBbGxMYW5nc0F2YWlsYWJsZSA9IGF2YWlsYWJsZUxhbmdzSWRzLmxlbmd0aCA9PT0gMDtcblxuICAgICAgICAgIHRoaXMucmF3TGFuZ3VhZ2VzID0gYXJlQWxsTGFuZ3NBdmFpbGFibGVcbiAgICAgICAgICAgID8gbGFuZ3VhZ2VzXG4gICAgICAgICAgICA6IGxhbmd1YWdlcy5maWx0ZXIoKHsgaWQgfSkgPT4gaWQgIT09IHVuZGVmaW5lZCAmJiBhdmFpbGFibGVMYW5nc0lkcy5pbmNsdWRlcyhpZCkpO1xuICAgICAgICAgIHRoaXMubGFuZ3VhZ2VzLnNldChcbiAgICAgICAgICAgIHRoaXMucmF3TGFuZ3VhZ2VzLm1hcChsYW5ndWFnZSA9PiAoe1xuICAgICAgICAgICAgICBsYWJlbDpcbiAgICAgICAgICAgICAgICB0eXBlb2YgbGFuZ3VhZ2UubmFtZSA9PT0gJ3N0cmluZycgJiYgbGFuZ3VhZ2UubmFtZS5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgICA/IGxhbmd1YWdlLm5hbWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBsYW5ndWFnZS5uYW1lLnNsaWNlKDEpXG4gICAgICAgICAgICAgICAgICA6ICdVbmtub3duJyxcbiAgICAgICAgICAgICAgdmFsdWU6IGxhbmd1YWdlLm5hbWUgYXMgQ29kZUVkaXRvckxhbmd1YWdlcyxcbiAgICAgICAgICAgICAgdmVyc2lvbjogbGFuZ3VhZ2UudmVyc2lvbixcbiAgICAgICAgICAgIH0pKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pLFxuICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgIHRoaXMubG9hZGluZ1N0YXRlQ2hhbmdlZC5lbWl0KGZhbHNlKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgYm9pbGVycGxhdGVzID0gdGhpcy5xdWVzdGlvbj8uY29udGV4dC5ib2lsZXJwbGF0ZXMgPz8gW107XG4gICAgICAgICAgYm9pbGVycGxhdGVzLmZvckVhY2goYm9pbGVycGxhdGUgPT4ge1xuICAgICAgICAgICAgaWYgKGJvaWxlcnBsYXRlLnByb2dyYW1taW5nX2xhbmd1YWdlLm5hbWUpIHtcbiAgICAgICAgICAgICAgdGhpcy5pbml0Q29kZXNNYXAuc2V0KFxuICAgICAgICAgICAgICAgIGJvaWxlcnBsYXRlLnByb2dyYW1taW5nX2xhbmd1YWdlLm5hbWUgYXMgQ29kZUVkaXRvckxhbmd1YWdlcyxcbiAgICAgICAgICAgICAgICBib2lsZXJwbGF0ZS5jb2RlXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pLFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5saWJDb2RpbmdUZXN0U2VydmljZS5jdXJyZW50TGFuZ3VhZ2UkKSxcbiAgICAgICAgdGFwKChsYW5ndWFnZTogQ29kZUVkaXRvckxhbmd1YWdlcykgPT4ge1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnRMYW5nID0gdGhpcy5yYXdMYW5ndWFnZXMuZmluZCh4ID0+IHgubmFtZSA9PT0gbGFuZ3VhZ2UpO1xuICAgICAgICAgIGlmIChjdXJyZW50TGFuZykge1xuICAgICAgICAgICAgdGhpcy5jb2RpbmdUZXN0U2VydmljZS5zZXRDdXJyZW50TGFuZ3VhZ2VMQVQoY3VycmVudExhbmcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBpbml0Q29kZSA9IHRoaXMuaW5pdENvZGVzTWFwLmdldChsYW5ndWFnZSk7XG4gICAgICAgICAgaWYgKGluaXRDb2RlKSB7XG4gICAgICAgICAgICB0aGlzLmluaXRDb2RlID0gaW5pdENvZGU7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNvZGUodGhpcy5pbml0Q29kZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMubGliQ29kaW5nVGVzdFNlcnZpY2Uuc2V0Qm9pbGVycGxhdGVMb2FkaW5nU3RhdHVzKGZhbHNlKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBsaXN0ZW5UaGVtZUNoYW5nZSgpOiB2b2lkIHtcbiAgICB0aGlzLmxpYkNvZGluZ1Rlc3RTZXJ2aWNlLnRoZW1lQ2hhbmdlZCQucGlwZSh1bnRpbERlc3Ryb3llZCh0aGlzKSkuc3Vic2NyaWJlKHRoZW1lID0+IHtcbiAgICAgIHRoaXMuY2Fub3B5VWlUaGVtZSA9IHRoZW1lID09PSBUaGVtZXMuRGFyayA/ICdkYXJrJyA6ICdsaWdodCc7XG4gICAgICB0aGlzLnRoZW1lQ2hhbmdlZC5lbWl0KHRoaXMuY2Fub3B5VWlUaGVtZSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGxpc3RlbkZ1bGxzY3JlZW5DaGFuZ2UoKTogdm9pZCB7XG4gICAgdGhpcy5saWJDb2RpbmdUZXN0U2VydmljZS5pc0Z1bGxzY3JlZW4kXG4gICAgICAucGlwZSh1bnRpbERlc3Ryb3llZCh0aGlzKSlcbiAgICAgIC5zdWJzY3JpYmUoaXNGdWxsc2NyZWVuID0+IHRoaXMuZnVsbHNjcmVlbkNoYW5nZWQuZW1pdChpc0Z1bGxzY3JlZW4pKTtcbiAgfVxuXG4gIHByaXZhdGUgbGlzdGVuRGVsZXRlQ3VzdG9tVGVzdENhc2VzKCk6IHZvaWQge1xuICAgIHRoaXMuY29kaW5nVGVzdFNlcnZpY2VcbiAgICAgIC5saXN0ZW5EZWxldGVDdXN0b21UZXN0Q2FzZXMoKVxuICAgICAgLnBpcGUodW50aWxEZXN0cm95ZWQodGhpcykpXG4gICAgICAuc3Vic2NyaWJlKCh7IGluZGV4IH0pID0+IHtcbiAgICAgICAgdGhpcy5jb2RpbmdUZXN0U2VydmljZS5oYW5kbGVEZWxldGVUZXN0Q2FzZU1vZGFsKFxuICAgICAgICAgIGluZGV4LFxuICAgICAgICAgIHRoaXMuY2Fub3B5VWlUaGVtZSxcbiAgICAgICAgICB0aGlzLmNvbXBhbnlDb2xvclxuICAgICAgICApO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGxpc3Rlbkxhbmd1YWdlQ2hhbmdlKCk6IHZvaWQge1xuICAgIHRoaXMubGliQ29kaW5nVGVzdFNlcnZpY2UuY3VycmVudExhbmd1YWdlJFxuICAgICAgLnBpcGUodW50aWxEZXN0cm95ZWQodGhpcykpXG4gICAgICAuc3Vic2NyaWJlKChsYW5ndWFnZTogQ29kZUVkaXRvckxhbmd1YWdlcykgPT4ge1xuICAgICAgICB0aGlzLmN1cnJlbnRMYW5ndWFnZSA9IGxhbmd1YWdlO1xuICAgICAgICBjb25zdCBjb2RlID0gdGhpcy5pbml0Q29kZXNNYXAuZ2V0KGxhbmd1YWdlKTtcbiAgICAgICAgaWYgKGNvZGUpIHtcbiAgICAgICAgICB0aGlzLmluaXRDb2RlID0gY29kZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmluaXRDb2RlID0gJyc7XG4gICAgICAgICAgY29uc29sZS53YXJuKGBObyBpbml0aWFsIGNvZGUgZm91bmQgZm9yIGxhbmd1YWdlOiAke2xhbmd1YWdlfWApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgbGlzdGVuUmVzZXRDb2RlKCk6IHZvaWQge1xuICAgIHRoaXMuY29kaW5nVGVzdFNlcnZpY2VcbiAgICAgIC5saXN0ZW5Db2RpbmdUZXN0Q2hhbmdlcygpXG4gICAgICAucGlwZSh1bnRpbERlc3Ryb3llZCh0aGlzKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLmNvZGluZ1Rlc3RTZXJ2aWNlLmhhbmRsZVJlc2V0Q29kZU1vZGFsKHRoaXMuY2Fub3B5VWlUaGVtZSwgdGhpcy5jb21wYW55Q29sb3IpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGxpc3RlblRlc3RSZXN1bHRzKCk6IHZvaWQge1xuICAgIHRoaXMuY29kaW5nVGVzdFNlcnZpY2UuY29kaW5nVGVzdFJlc3VsdHMkLnBpcGUodW50aWxEZXN0cm95ZWQodGhpcykpLnN1YnNjcmliZShyZXN1bHRzID0+IHtcbiAgICAgIHRoaXMuY29kaW5nVGVzdFJlc3VsdHMgPSByZXN1bHRzO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRTcWxUZXN0Q2FzZXMoKTogdm9pZCB7XG4gICAgY29uc3QgdGVzdENhc2VzID0gdGhpcy5xdWVzdGlvbj8uY29udGV4dD8uc3FsX3Rlc3RjYXNlcy5tYXAodGVzdENhc2UgPT4gKHtcbiAgICAgIC4uLnRlc3RDYXNlLFxuICAgICAgcG9zdF9zcWw6IHRlc3RDYXNlLnBvc3Rfc3FsIHx8ICcnLFxuICAgICAgaW5pdGlhbF9zcWw6IHRoaXMucXVlc3Rpb24/LmNvbnRleHQ/LmluaXRpYWxfc3FsIHx8ICcnLFxuICAgIH0pKSBhcyBTcWxUZXN0Q2FzZVtdO1xuICAgIHRoaXMuY29kaW5nVGVzdFNlcnZpY2Uuc2V0U3FsVGVzdENhc2VzKHRlc3RDYXNlcyk7XG4gICAgdGhpcy5leGFtcGxlVGVzdENhc2VzID0gdGVzdENhc2VzLm1hcCh0aGlzLmNvZGluZ1Rlc3RTZXJ2aWNlLnRyYW5zZm9ybVRvRXhhbXBsZVNRTFRlc3RDYXNlKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0VGVzdENhc2VzKCk6IHZvaWQge1xuICAgIHRoaXMuZXhhbXBsZVRlc3RDYXNlcyA9IHRoaXMucXVlc3Rpb24/LmNvbnRleHQ/LnRlc3RjYXNlcz8ubWFwKFxuICAgICAgdGhpcy5jb2RpbmdUZXN0U2VydmljZS50cmFuc2Zvcm1Ub0V4YW1wbGVMQVR0ZXN0Q2FzZVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHNldExpc3RlbmVycygpOiB2b2lkIHtcbiAgICB0aGlzLmxpc3Rlbkd1aWRlZFRvdXJTdGFydCgpO1xuICAgIHRoaXMubGlzdGVuRnVsbHNjcmVlbkNoYW5nZSgpO1xuICAgIHRoaXMubGlzdGVuVGhlbWVDaGFuZ2UoKTtcbiAgICB0aGlzLmxpc3RlblJlc2V0Q29kZSgpO1xuICAgIHRoaXMuY29kaW5nVGVzdFNlcnZpY2UudHJhY2tDb25maWdDaGFuZ2VkKCEhdGhpcy50ZXN0Py5pc19wcmV2aWV3X21vZGUpO1xuICAgIHRoaXMubGlzdGVuVGVzdFJlc3VsdHMoKTtcbiAgICBpZiAodGhpcy5pc0xBVCkge1xuICAgICAgdGhpcy5saXN0ZW5EZWxldGVDdXN0b21UZXN0Q2FzZXMoKTtcbiAgICAgIHRoaXMubGlzdGVuTGFuZ3VhZ2VDaGFuZ2UoKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKnRyYW5zbG9jbz1cImxldCB0OyByZWFkOiAnQ09ESU5HX1FVRVNUSU9OJ1wiPlxuICBAaWYgKGxhbmd1YWdlcygpPy5sZW5ndGggJiYgY29kaW5nTGliVHJhbnNsYXRpb25zKCkpIHtcbiAgICA8dGdvLWNvZGluZy10ZXN0XG4gICAgICBjbGFzcz1cImNvZGluZy1saWJcIlxuICAgICAgW2Fzc2Vzc21lbnRJZF09XCJhc3Nlc3NtZW50IS51dWlkIVwiXG4gICAgICBbcXVlc3Rpb25JZF09XCJxdWVzdGlvbiEucXVlc3Rpb25faWQhXCJcbiAgICAgIFtpc0xBVF09XCJpc0xBVFwiXG4gICAgICBbY2FuQWRkQ3VzdG9tVGVzdENhc2VzXT1cImlzTEFUXCJcbiAgICAgIFtpc1NRTF09XCJpc1NRTFwiXG4gICAgICBbbGFuZ3VhZ2VzXT1cImxhbmd1YWdlcygpXCJcbiAgICAgIFtpbml0Q29kZV09XCJpbml0Q29kZVwiXG4gICAgICBbbW9kZV09XCJtb2RlXCJcbiAgICAgIFt2aWV3TW9kZV09XCJ2aWV3TW9kZXMuRnVsbFwiXG4gICAgICBbbG9hZGluZ109XCJ0ZXN0UmVzdWx0c0xvYWRpbmcoKVwiXG4gICAgICBbY29tcGFueUNvbG9yXT1cImNvbXBhbnlDb2xvclwiXG4gICAgICBbcXVlc3Rpb25UZXh0XT1cInF1ZXN0aW9uLnRleHRcIlxuICAgICAgW3Rlc3RDYXNlc1N0YXR1c109XCJjb2RpbmdUZXN0UmVzdWx0cz8ucmVzdW1lXCJcbiAgICAgIFtydW5UZXN0UmVzcG9uc2VdPVwiY29kaW5nVGVzdFJlc3VsdHM/Lmxpc3RSZXNwb25zZSFcIlxuICAgICAgW2V4YW1wbGVUZXN0Q2FzZXNdPVwiZXhhbXBsZVRlc3RDYXNlc1wiXG4gICAgICBbYXBwbGljYXRpb25UaGVtZV09XCJjYW5vcHlVaVRoZW1lXCJcbiAgICAgIFt0cmFuc2xhdGlvbnNdPVwiY29kaW5nTGliVHJhbnNsYXRpb25zKClcIlxuICAgICAgKGNvZGVDaGFuZ2UpPVwidXBkYXRlQ29kZSgkZXZlbnQpXCJcbiAgICAgIChydW5UZXN0Q2xpY2spPVwicnVuVGVzdCgpXCJcbiAgICAgIChsYW5ndWFnZUNoYW5nZSk9XCJsYW5ndWFnZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgIChwYXN0ZUV2ZW50KT1cInNjcmVlbnNob3RQYXN0ZSgkZXZlbnQpXCJcbiAgICA+XG4gICAgPC90Z28tY29kaW5nLXRlc3Q+XG4gIH1cbjwvbmctY29udGFpbmVyPlxuXG48bmd4LWd1aWRlZC10b3VyXG4gIFtuZ0NsYXNzXT1cImFjdGl2ZUd1aWRlZFRvdXJJZCQgfCBhc3luY1wiXG4gIFtuZ1N0eWxlXT1cInsgJy0tY29tcGFueS1jb2xvcic6IGNvbXBhbnlDb2xvciB9XCJcbiAgW2NsYXNzLmRhcmtdPVwiY2Fub3B5VWlUaGVtZSA9PT0gJ2RhcmsnXCJcbj48L25neC1ndWlkZWQtdG91cj5cblxuIl19
@@ -1,2 +0,0 @@
1
- export { provideTgoCodingTest } from './tgo-coding-test.provider';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy90Z28tY29kaW5nLXRlc3Qvc3JjL2xpYi9jb25maWcvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNEJBQTRCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBUZ29Db2RpbmdUZXN0Q29uZmlnIH0gZnJvbSAnLi90Z28tY29kaW5nLXRlc3QuY29uZmlnJztcbmV4cG9ydCB7IHByb3ZpZGVUZ29Db2RpbmdUZXN0IH0gZnJvbSAnLi90Z28tY29kaW5nLXRlc3QucHJvdmlkZXInO1xuXG4iXX0=
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGdvLWNvZGluZy10ZXN0LmNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3Rnby1jb2RpbmctdGVzdC9zcmMvbGliL2NvbmZpZy90Z28tY29kaW5nLXRlc3QuY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbmZpZ3VyYXRpb24gaW50ZXJmYWNlIGZvciB0aGUgVEdPIENvZGluZyBUZXN0IGxpYnJhcnkuXG4gKiBcbiAqIFRoaXMgaW50ZXJmYWNlIGRlZmluZXMgdGhlIHJ1bnRpbWUgY29uZmlndXJhdGlvbiB0aGF0IG11c3QgYmUgcHJvdmlkZWRcbiAqIGJ5IHRoZSBjb25zdW1pbmcgYXBwbGljYXRpb24uIFRoZSBsaWJyYXJ5IGRvZXMgbm90IGhvbGQgZW52aXJvbm1lbnRcbiAqIHZhcmlhYmxlcyBpdHNlbGY7IGluc3RlYWQsIGl0IHJlY2VpdmVzIHRoZW0gZnJvbSB0aGUgaG9zdCBhcHBsaWNhdGlvblxuICogdGhyb3VnaCBkZXBlbmRlbmN5IGluamVjdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZ29Db2RpbmdUZXN0Q29uZmlnIHtcbiAgLyoqXG4gICAqIFRoZSBiYXNlIFVSTCBmb3IgdGhlIG1haW4gQVBJIGVuZHBvaW50LlxuICAgKiBUaGlzIGlzIHJlcXVpcmVkIGZvciB0aGUgbGlicmFyeSB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBtYWluIEFQSSBzZXJ2aWNlLlxuICAgKiBcbiAgICogRXhhbXBsZTogJ2h0dHBzOi8vYXBpLXRhbGVudC1zdGFnaW5nLnRlc3Rnb3JpbGxhLmNvbS9hcGkvJ1xuICAgKi9cbiAgYXBpVXJsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBiYXNlIFVSTCBmb3IgdGhlIENvZGVSdW5uZXIgVjIgQVBJIGVuZHBvaW50LlxuICAgKiBUaGlzIGlzIHJlcXVpcmVkIGZvciB0aGUgbGlicmFyeSB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBjb2RlIGV4ZWN1dGlvbiBzZXJ2aWNlLlxuICAgKiBcbiAgICogRXhhbXBsZTogJ2h0dHBzOi8vY3ItdjItc3RhZ2luZy50ZXN0Z29yaWxsYS5jb20nXG4gICAqL1xuICBjb2RlcnVubmVyVjJFbmRwb2ludDogc3RyaW5nO1xufVxuXG4iXX0=