From df6b3ed952520f5f44da494d4cde3b439bd60885 Mon Sep 17 00:00:00 2001 From: MoritzWeber Date: Mon, 2 Sep 2024 16:29:14 +0200 Subject: [PATCH] ci: Apply ESLint 9 rules to code --- .pre-commit-config.yaml | 8 +++- .../api-documentation.component.ts | 4 +- .../error-handling.interceptor.ts | 4 +- .../app/general/nav-bar/nav-bar.service.ts | 4 +- .../confirmation-dialog.component.ts | 2 +- .../service/pipeline-run.service.ts | 8 ++-- .../service/pipeline.service.ts | 8 ++-- .../view-logs-dialog.component.ts | 4 +- .../model-diagram-code-block.stories.ts | 1 - .../model-diagram-dialog.component.ts | 8 ++-- .../model-diagram-preview-dialog.component.ts | 4 +- .../service/model-restrictions.service.ts | 4 +- .../manage-git-model.component.ts | 2 +- .../t4c/service/t4c-model.service.ts | 12 ++--- .../projects/models/service/model.service.ts | 2 +- .../model-detail/git-model.service.ts | 6 +-- .../service/project-user.service.ts | 4 +- .../app/projects/service/project.service.ts | 2 +- .../services/load-files/load-files.service.ts | 4 +- .../app/sessions/service/session.service.ts | 8 +--- .../app/sessions/session/session.component.ts | 2 +- .../tiling-window-manager.component.ts | 4 +- .../file-browser-dialog.component.ts | 30 ++++++------- .../session-sharing-dialog.component.ts | 6 +-- ...create-readonly-model-options.component.ts | 4 +- .../create-session-history.component.ts | 4 +- .../session-history.service.ts | 6 +-- .../service/monitoring.service.ts | 12 ++--- .../core/tools-settings/tool.service.ts | 44 +++++++++---------- .../tools-settings.component.ts | 2 +- .../service/pure-variants.service.ts | 4 +- .../service/git-instances.service.ts | 10 ++--- .../basic-auth-token.service.ts | 4 +- .../user-workspaces.component.ts | 8 ++-- frontend/src/storybook/diagram.ts | 2 +- frontend/src/storybook/model-badge.ts | 2 +- frontend/src/storybook/t4c.ts | 4 +- 37 files changed, 119 insertions(+), 128 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index c9640486a4..3d0b6ce2fc 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -166,7 +166,13 @@ repos: - 'eslint-plugin-unused-imports@^4.1.3' - 'eslint-plugin-tailwindcss@^3.17.4' - 'eslint-plugin-storybook@^0.9.0--canary.156.ed236ca.0' - args: ['--config', 'frontend/eslint.config.mjs', '--fix'] + args: + [ + '--config', + 'frontend/eslint.config.mjs', + '--fix', + '--no-warn-ignored', + ] types: [] files: '^frontend/' exclude: '.+\.spec(-helper)?\.ts$|^frontend/src/app/openapi' diff --git a/frontend/src/app/general/api-documentation/api-documentation.component.ts b/frontend/src/app/general/api-documentation/api-documentation.component.ts index 8a88ba21c2..e720de5d81 100644 --- a/frontend/src/app/general/api-documentation/api-documentation.component.ts +++ b/frontend/src/app/general/api-documentation/api-documentation.component.ts @@ -13,8 +13,8 @@ import { environment } from 'src/environments/environment'; imports: [MatIcon], }) export class ApiDocumentationComponent { - @Input() tag: string = ''; - @Input() hyperlink: string = ''; + @Input() tag = ''; + @Input() hyperlink = ''; getAPIDocsLink() { return `${environment.api_docs_url}/redoc#tag/${this.tag}/operation/${this.hyperlink}`; diff --git a/frontend/src/app/general/error-handling/error-handling.interceptor.ts b/frontend/src/app/general/error-handling/error-handling.interceptor.ts index 0c5a8fdf4a..deb81e8c9a 100644 --- a/frontend/src/app/general/error-handling/error-handling.interceptor.ts +++ b/frontend/src/app/general/error-handling/error-handling.interceptor.ts @@ -119,7 +119,7 @@ export class ErrorHandlingInterceptor implements HttpInterceptor { reader.onload = (e: Event) => { try { const errmsg = JSON.parse( - (e.target).result, + (e.target as FileReaderEventTarget).result, ); reject( new HttpErrorResponse({ @@ -130,7 +130,7 @@ export class ErrorHandlingInterceptor implements HttpInterceptor { url: err.url || undefined, }), ); - } catch (e) { + } catch { reject(err); } }; diff --git a/frontend/src/app/general/nav-bar/nav-bar.service.ts b/frontend/src/app/general/nav-bar/nav-bar.service.ts index e8a785d2eb..7d37118ca6 100644 --- a/frontend/src/app/general/nav-bar/nav-bar.service.ts +++ b/frontend/src/app/general/nav-bar/nav-bar.service.ts @@ -80,11 +80,11 @@ export class NavBarService { }; } -export type NavBarItem = { +export interface NavBarItem { name: string; routerLink?: string | string[]; href?: string; target?: string; requiredRole: Role; icon?: string; -}; +} diff --git a/frontend/src/app/helpers/confirmation-dialog/confirmation-dialog.component.ts b/frontend/src/app/helpers/confirmation-dialog/confirmation-dialog.component.ts index ed3c6a9c26..d18822e781 100644 --- a/frontend/src/app/helpers/confirmation-dialog/confirmation-dialog.component.ts +++ b/frontend/src/app/helpers/confirmation-dialog/confirmation-dialog.component.ts @@ -22,7 +22,7 @@ export interface ConfirmationDialogData { imports: [FormsModule, MatFormField, MatInput, MatButton], }) export class ConfirmationDialogComponent implements OnInit { - inputText: string = ''; + inputText = ''; constructor( public dialogRef: MatDialogRef, diff --git a/frontend/src/app/projects/models/backup-settings/pipeline-runs/service/pipeline-run.service.ts b/frontend/src/app/projects/models/backup-settings/pipeline-runs/service/pipeline-run.service.ts index 1d270bef0f..ea83b57d68 100644 --- a/frontend/src/app/projects/models/backup-settings/pipeline-runs/service/pipeline-run.service.ts +++ b/frontend/src/app/projects/models/backup-settings/pipeline-runs/service/pipeline-run.service.ts @@ -196,18 +196,16 @@ export class PipelineRunService { } } -export type PipelineRun = { +export interface PipelineRun { status: PipelineRunStatus; triggerer: User; id: number; trigger_time: string; environment: PipelineRunEnvironment; -}; - -interface PipelineRunEnvironment { - [key: string]: string; } +type PipelineRunEnvironment = Record; + export type PipelineRunStatus = | 'pending' | 'scheduled' diff --git a/frontend/src/app/projects/models/backup-settings/service/pipeline.service.ts b/frontend/src/app/projects/models/backup-settings/service/pipeline.service.ts index 8d155f16c2..a10a1094f3 100644 --- a/frontend/src/app/projects/models/backup-settings/service/pipeline.service.ts +++ b/frontend/src/app/projects/models/backup-settings/service/pipeline.service.ts @@ -93,17 +93,17 @@ export class PipelineService { } } -export type Pipeline = { +export interface Pipeline { id: number; t4c_model: SimpleT4CModel; git_model: BaseGitModel; run_nightly: boolean; include_commit_history: boolean; -}; +} -export type PostPipeline = { +export interface PostPipeline { t4cmodelId: number; gitmodelId: number; includeCommitHistory: boolean; runNightly: boolean; -}; +} diff --git a/frontend/src/app/projects/models/backup-settings/view-logs-dialog/view-logs-dialog.component.ts b/frontend/src/app/projects/models/backup-settings/view-logs-dialog/view-logs-dialog.component.ts index e35c29dbb9..9250d65b36 100644 --- a/frontend/src/app/projects/models/backup-settings/view-logs-dialog/view-logs-dialog.component.ts +++ b/frontend/src/app/projects/models/backup-settings/view-logs-dialog/view-logs-dialog.component.ts @@ -84,9 +84,9 @@ export class ViewLogsDialogComponent { } } -export type ViewLogsData = { +export interface ViewLogsData { projectSlug: string; modelSlug: string; job_id: string; backup_id: number; -}; +} diff --git a/frontend/src/app/projects/models/diagrams/model-diagram-dialog/model-diagram-code-block/model-diagram-code-block.stories.ts b/frontend/src/app/projects/models/diagrams/model-diagram-dialog/model-diagram-code-block/model-diagram-code-block.stories.ts index 1a343f5aa7..23bf5e246a 100644 --- a/frontend/src/app/projects/models/diagrams/model-diagram-dialog/model-diagram-code-block/model-diagram-code-block.stories.ts +++ b/frontend/src/app/projects/models/diagrams/model-diagram-dialog/model-diagram-code-block/model-diagram-code-block.stories.ts @@ -2,7 +2,6 @@ * SPDX-FileCopyrightText: Copyright DB InfraGO AG and contributors * SPDX-License-Identifier: Apache-2.0 */ - import { Meta, StoryObj } from '@storybook/angular'; import { mockModel } from 'src/storybook/model'; import { mockProject } from 'src/storybook/project'; diff --git a/frontend/src/app/projects/models/diagrams/model-diagram-dialog/model-diagram-dialog.component.ts b/frontend/src/app/projects/models/diagrams/model-diagram-dialog/model-diagram-dialog.component.ts index a8c1ea6a85..c1cbe65c76 100644 --- a/frontend/src/app/projects/models/diagrams/model-diagram-dialog/model-diagram-dialog.component.ts +++ b/frontend/src/app/projects/models/diagrams/model-diagram-dialog/model-diagram-dialog.component.ts @@ -193,11 +193,9 @@ export class ModelDiagramDialogComponent implements OnInit { } } -export interface Diagrams { - [uuid: string]: Diagram; -} +export type Diagrams = Record; -type Diagram = { +interface Diagram { loading: boolean; content?: string | ArrayBuffer | null; -}; +} diff --git a/frontend/src/app/projects/models/diagrams/model-diagram-preview-dialog/model-diagram-preview-dialog.component.ts b/frontend/src/app/projects/models/diagrams/model-diagram-preview-dialog/model-diagram-preview-dialog.component.ts index 12db2a09f2..0007064fab 100644 --- a/frontend/src/app/projects/models/diagrams/model-diagram-preview-dialog/model-diagram-preview-dialog.component.ts +++ b/frontend/src/app/projects/models/diagrams/model-diagram-preview-dialog/model-diagram-preview-dialog.component.ts @@ -42,7 +42,7 @@ export class ModelDiagramPreviewDialogComponent implements AfterViewInit { } } -export type MatDialogPreviewData = { +export interface MatDialogPreviewData { diagram: DiagramMetadata; content: string | ArrayBuffer; -}; +} diff --git a/frontend/src/app/projects/models/model-restrictions/service/model-restrictions.service.ts b/frontend/src/app/projects/models/model-restrictions/service/model-restrictions.service.ts index 65deba5947..b91cecd3e0 100644 --- a/frontend/src/app/projects/models/model-restrictions/service/model-restrictions.service.ts +++ b/frontend/src/app/projects/models/model-restrictions/service/model-restrictions.service.ts @@ -32,6 +32,6 @@ export function areRestrictionsEqual( return a.allow_pure_variants === b.allow_pure_variants; } -export type ModelRestrictions = { +export interface ModelRestrictions { allow_pure_variants: boolean; -}; +} diff --git a/frontend/src/app/projects/models/model-source/git/manage-git-model/manage-git-model.component.ts b/frontend/src/app/projects/models/model-source/git/manage-git-model/manage-git-model.component.ts index bb661474a2..f4a51b9d61 100644 --- a/frontend/src/app/projects/models/model-source/git/manage-git-model/manage-git-model.component.ts +++ b/frontend/src/app/projects/models/model-source/git/manage-git-model/manage-git-model.component.ts @@ -99,7 +99,7 @@ export class ManageGitModelComponent implements OnInit, OnDestroy { @Input() asStepper?: boolean; @Output() create = new EventEmitter(); - public availableGitInstances?: Array; + public availableGitInstances?: GitInstance[]; public selectedGitInstance?: GitInstance; private revisions?: Revisions; diff --git a/frontend/src/app/projects/models/model-source/t4c/service/t4c-model.service.ts b/frontend/src/app/projects/models/model-source/t4c/service/t4c-model.service.ts index 8352ee3d89..25eb1f5be7 100644 --- a/frontend/src/app/projects/models/model-source/t4c/service/t4c-model.service.ts +++ b/frontend/src/app/projects/models/model-source/t4c/service/t4c-model.service.ts @@ -122,20 +122,20 @@ export class T4CModelService { } } -export type SubmitT4CModel = { +export interface SubmitT4CModel { t4c_instance_id: number; t4c_repository_id: number; name: string; -}; +} -export type T4CModel = { +export interface T4CModel { name: string; id: number; repository: T4CRepository; -}; +} -export type SimpleT4CModel = { +export interface SimpleT4CModel { project_name: string; repository_name: string; instance_name: string; -}; +} diff --git a/frontend/src/app/projects/models/service/model.service.ts b/frontend/src/app/projects/models/service/model.service.ts index b499b666c7..a32367563b 100644 --- a/frontend/src/app/projects/models/service/model.service.ts +++ b/frontend/src/app/projects/models/service/model.service.ts @@ -140,7 +140,7 @@ export class ModelWrapperService { } asyncSlugValidator(ignoreModel?: ToolModel): AsyncValidatorFn { - const ignoreSlug = !!ignoreModel ? ignoreModel.slug : -1; + const ignoreSlug = ignoreModel ? ignoreModel.slug : -1; return (control: AbstractControl): Observable => { const modelSlug = slugify(control.value, { lower: true }); return this.models$.pipe( diff --git a/frontend/src/app/projects/project-detail/model-overview/model-detail/git-model.service.ts b/frontend/src/app/projects/project-detail/model-overview/model-detail/git-model.service.ts index 27820f5f42..8fb2bbed1e 100644 --- a/frontend/src/app/projects/project-detail/model-overview/model-detail/git-model.service.ts +++ b/frontend/src/app/projects/project-detail/model-overview/model-detail/git-model.service.ts @@ -26,7 +26,7 @@ export class GitModelService { loadGitModels(project_slug: string, model_slug: string): void { this.http .get< - Array + GetGitModel[] >(this.BACKEND_URL_PREFIX + `/projects/${project_slug}/models/${model_slug}/modelsources/git`) .subscribe((gitModels) => this._gitModels.next(gitModels)); } @@ -112,12 +112,12 @@ export class GitModelService { } } -export type BaseGitModel = { +export interface BaseGitModel { path: string; revision: string; entrypoint: string; username: string; -}; +} export type CreateGitModel = BaseGitModel & { password?: string; diff --git a/frontend/src/app/projects/project-detail/project-users/service/project-user.service.ts b/frontend/src/app/projects/project-detail/project-users/service/project-user.service.ts index 0899218da4..a2db1a9f8b 100644 --- a/frontend/src/app/projects/project-detail/project-users/service/project-user.service.ts +++ b/frontend/src/app/projects/project-detail/project-users/service/project-user.service.ts @@ -211,12 +211,12 @@ export class ProjectUserService { } } -export type ProjectUser = { +export interface ProjectUser { project_name: string; permission: ProjectUserPermission; role: ProjectUserRole; user: User; -}; +} export type ProjectUserPermission = 'read' | 'write'; export type ProjectUserRole = 'user' | 'manager' | 'administrator'; diff --git a/frontend/src/app/projects/service/project.service.ts b/frontend/src/app/projects/service/project.service.ts index 7ccffa3424..c011bb9bad 100644 --- a/frontend/src/app/projects/service/project.service.ts +++ b/frontend/src/app/projects/service/project.service.ts @@ -92,7 +92,7 @@ export class ProjectWrapperService { } asyncSlugValidator(ignoreProject?: Project): AsyncValidatorFn { - const ignoreSlug = !!ignoreProject ? ignoreProject.slug : -1; + const ignoreSlug = ignoreProject ? ignoreProject.slug : -1; return (control: AbstractControl): Observable => { const projectSlug = slugify(control.value, { lower: true }); return this.projects$.pipe( diff --git a/frontend/src/app/services/load-files/load-files.service.ts b/frontend/src/app/services/load-files/load-files.service.ts index 956cab89c5..5a7dd06879 100644 --- a/frontend/src/app/services/load-files/load-files.service.ts +++ b/frontend/src/app/services/load-files/load-files.service.ts @@ -41,6 +41,6 @@ export class LoadFilesService { } } -export type UploadResponse = { +export interface UploadResponse { message: string; -}; +} diff --git a/frontend/src/app/sessions/service/session.service.ts b/frontend/src/app/sessions/service/session.service.ts index 2d8b7fc9bb..563afa58c4 100644 --- a/frontend/src/app/sessions/service/session.service.ts +++ b/frontend/src/app/sessions/service/session.service.ts @@ -15,13 +15,9 @@ import { import { SessionHistoryService } from 'src/app/sessions/user-sessions-wrapper/create-sessions/create-session-history/session-history.service'; import { environment } from 'src/environments/environment'; -export interface LocalStorage { - [id: string]: string; -} +export type LocalStorage = Record; -export interface Cookies { - [id: string]: string; -} +export type Cookies = Record; export interface ReadonlySession extends Session { project: Project; diff --git a/frontend/src/app/sessions/session/session.component.ts b/frontend/src/app/sessions/session/session.component.ts index 32dbc7c6ab..8bba7f095e 100644 --- a/frontend/src/app/sessions/session/session.component.ts +++ b/frontend/src/app/sessions/session/session.component.ts @@ -49,7 +49,7 @@ import { TilingWindowManagerComponent } from './tiling-window-manager/tiling-win export class SessionComponent implements OnInit, OnDestroy { cachedSessions?: CachedSession[] = undefined; - selectedWindowType: string = 'floating'; + selectedWindowType = 'floating'; constructor( public userSessionService: UserSessionService, diff --git a/frontend/src/app/sessions/session/tiling-window-manager/tiling-window-manager.component.ts b/frontend/src/app/sessions/session/tiling-window-manager/tiling-window-manager.component.ts index 37e51ea6d3..7c91fcc99a 100644 --- a/frontend/src/app/sessions/session/tiling-window-manager/tiling-window-manager.component.ts +++ b/frontend/src/app/sessions/session/tiling-window-manager/tiling-window-manager.component.ts @@ -203,14 +203,14 @@ export class TilingWindowManagerComponent implements OnInit { } } -type ResizeState = { +interface ResizeState { index?: number; startX?: number; leftSession?: TilingSession; rightSession?: TilingSession; startWidthLeft?: number; startWidthRight?: number; -}; +} type ValidResizeState = Required; diff --git a/frontend/src/app/sessions/user-sessions-wrapper/active-sessions/file-browser-dialog/file-browser-dialog.component.ts b/frontend/src/app/sessions/user-sessions-wrapper/active-sessions/file-browser-dialog/file-browser-dialog.component.ts index eef6f09630..ec10c922d9 100644 --- a/frontend/src/app/sessions/user-sessions-wrapper/active-sessions/file-browser-dialog/file-browser-dialog.component.ts +++ b/frontend/src/app/sessions/user-sessions-wrapper/active-sessions/file-browser-dialog/file-browser-dialog.component.ts @@ -61,11 +61,11 @@ import { FileExistsDialogComponent } from './file-exists-dialog/file-exists-dial ], }) export class FileBrowserDialogComponent implements OnInit { - files: Array<[File, string]> = []; + files: [File, string][] = []; uploadProgress: number | null = null; loadingFiles = false; - treeControl = new NestedTreeControl((node) => node.children); + treeControl = new NestedTreeControl((node) => node.children); // eslint-disable-line @typescript-eslint/no-deprecated dataSource = new BehaviorSubject([]); constructor( @@ -111,8 +111,7 @@ export class FileBrowserDialogComponent implements OnInit { if (!this.files.includes([file, path]) && response) { this.files.push([file, path]); if (parentNode.children) { - for (let i = 0; i < parentNode.children.length; i++) { - const child = parentNode.children[i]; + for (const child of parentNode.children) { if (child.name === name) { child.isNew = true; break; @@ -144,8 +143,7 @@ export class FileBrowserDialogComponent implements OnInit { this.treeControl.expand(parentNode); return true; } else if (parentNode.children) { - for (let i = 0; i < parentNode.children.length; i++) { - const child = parentNode.children[i]; + for (const child of parentNode.children) { result = this.addFileToTree(child, path, name); if (result) { this.treeControl.expand(parentNode); @@ -158,8 +156,8 @@ export class FileBrowserDialogComponent implements OnInit { checkIfFileExists(parentNode: PathNode, fileName: string): boolean { if (parentNode.children) { - for (let i = 0; i < parentNode.children.length; i++) { - if (fileName == parentNode.children[i].name) return true; + for (const child of parentNode.children) { + if (fileName == child.name) return true; } } return false; @@ -175,8 +173,8 @@ export class FileBrowserDialogComponent implements OnInit { this.treeControl.expand(parentNode); result = true; } else if (parentNode.children) { - for (let i = 0; i < parentNode.children?.length; i++) { - result = this._expandToNode(parentNode.children[i], node); + for (const child of parentNode.children) { + result = this._expandToNode(child, node); if (result) { this.treeControl.expand(parentNode); } @@ -227,10 +225,10 @@ export class FileBrowserDialogComponent implements OnInit { removeFileFromSelection(path: string, filename: string): void { let file; let prefix = null; - for (let i = 0; i < this.files.length; i++) { - file = this.files[i][0]; - prefix = this.files[i][1]; - if (this.files[i][0].name === filename && this.files[i][1] === path) { + for (const fileIter of this.files) { + file = fileIter[0]; + prefix = fileIter[1]; + if (file.name === filename && prefix === path) { break; } } @@ -280,9 +278,7 @@ export class FileBrowserDialogComponent implements OnInit { next: (response: Blob) => { saveAs( response, - `${filename - .replace(/^[\/\\: ]+/, '') - .replace(/[\/\\: ]+/g, '_')}.zip`, + `${filename.replace(/^[/\\: ]+/, '').replace(/[/\\: ]+/g, '_')}.zip`, ); this.session.download_in_progress = false; }, diff --git a/frontend/src/app/sessions/user-sessions-wrapper/active-sessions/session-sharing-dialog/session-sharing-dialog.component.ts b/frontend/src/app/sessions/user-sessions-wrapper/active-sessions/session-sharing-dialog/session-sharing-dialog.component.ts index 9df3246556..2cbf101590 100644 --- a/frontend/src/app/sessions/user-sessions-wrapper/active-sessions/session-sharing-dialog/session-sharing-dialog.component.ts +++ b/frontend/src/app/sessions/user-sessions-wrapper/active-sessions/session-sharing-dialog/session-sharing-dialog.component.ts @@ -60,7 +60,7 @@ export class SessionSharingDialogComponent { }); loading = false; - users: Array = []; + users: AddedUser[] = []; constructor( @Inject(MAT_DIALOG_DATA) public session: Session, @@ -180,8 +180,8 @@ export class SessionSharingDialogComponent { } } -type AddedUser = { +interface AddedUser { username: string; state: 'success' | 'pending' | 'error'; tooltip: string; -}; +} diff --git a/frontend/src/app/sessions/user-sessions-wrapper/create-sessions/create-readonly-session/create-readonly-model-options/create-readonly-model-options.component.ts b/frontend/src/app/sessions/user-sessions-wrapper/create-sessions/create-readonly-session/create-readonly-model-options/create-readonly-model-options.component.ts index 74054d5859..aa53d45485 100644 --- a/frontend/src/app/sessions/user-sessions-wrapper/create-sessions/create-readonly-session/create-readonly-model-options/create-readonly-model-options.component.ts +++ b/frontend/src/app/sessions/user-sessions-wrapper/create-sessions/create-readonly-session/create-readonly-model-options/create-readonly-model-options.component.ts @@ -29,13 +29,13 @@ import { existingRevisionValidator, } from 'src/app/services/git/git.service'; -export type ModelOptions = { +export interface ModelOptions { model: ToolModel; primaryGitModel: GetGitModel; include: boolean; revision: string; deepClone: boolean; -}; +} @Component({ selector: 'create-readonly-model-options', diff --git a/frontend/src/app/sessions/user-sessions-wrapper/create-sessions/create-session-history/create-session-history.component.ts b/frontend/src/app/sessions/user-sessions-wrapper/create-sessions/create-session-history/create-session-history.component.ts index 92142bdd15..c902341bc0 100644 --- a/frontend/src/app/sessions/user-sessions-wrapper/create-sessions/create-session-history/create-session-history.component.ts +++ b/frontend/src/app/sessions/user-sessions-wrapper/create-sessions/create-session-history/create-session-history.component.ts @@ -140,10 +140,10 @@ export class CreateSessionHistoryComponent implements OnInit, OnDestroy { } } -export type ResolvedSessionRequestHistory = { +export interface ResolvedSessionRequestHistory { tool: Tool; version: ToolVersion; connectionMethod: ConnectionMethod; loading: boolean; lastTimeRequested: Date; -}; +} diff --git a/frontend/src/app/sessions/user-sessions-wrapper/create-sessions/create-session-history/session-history.service.ts b/frontend/src/app/sessions/user-sessions-wrapper/create-sessions/create-session-history/session-history.service.ts index 5165cd3670..5ad57adfde 100644 --- a/frontend/src/app/sessions/user-sessions-wrapper/create-sessions/create-session-history/session-history.service.ts +++ b/frontend/src/app/sessions/user-sessions-wrapper/create-sessions/create-session-history/session-history.service.ts @@ -12,8 +12,6 @@ export class SessionHistoryService { LOCAL_STORAGE_SESSION_HISTORY_KEY = 'sessionRequestHistory'; MAX_SESSIONS_IN_HISTORY = 3; - constructor() {} - sessionHistory = new BehaviorSubject( undefined, ); @@ -92,9 +90,9 @@ export class SessionHistoryService { } } -export type SessionRequestHistory = { +export interface SessionRequestHistory { toolId: number; versionId: number; connectionMethodId: string; lastRequested: Date; -}; +} diff --git a/frontend/src/app/settings/core/pipelines-overview/service/monitoring.service.ts b/frontend/src/app/settings/core/pipelines-overview/service/monitoring.service.ts index ee79d9d422..40ba031658 100644 --- a/frontend/src/app/settings/core/pipelines-overview/service/monitoring.service.ts +++ b/frontend/src/app/settings/core/pipelines-overview/service/monitoring.service.ts @@ -32,13 +32,13 @@ export class MonitoringService { } } -export type GeneralHealth = { +export interface GeneralHealth { guacamole: boolean; database: boolean; operator: boolean; -}; +} -export type ToolmodelStatus = { +export interface ToolmodelStatus { project_slug: string; model_slug: string; @@ -47,13 +47,13 @@ export type ToolmodelStatus = { pipeline_status: PipelineRunStatus; model_badge_status: ModelModifierStatus; diagram_cache_status: ModelModifierStatus; -}; +} -export type ProjectStatus = { +export interface ProjectStatus { project_slug: string; warnings: string[]; -}; +} export type ModelModifierStatus = | 'success' diff --git a/frontend/src/app/settings/core/tools-settings/tool.service.ts b/frontend/src/app/settings/core/tools-settings/tool.service.ts index a0e1f4561c..8b2a0be498 100644 --- a/frontend/src/app/settings/core/tools-settings/tool.service.ts +++ b/frontend/src/app/settings/core/tools-settings/tool.service.ts @@ -18,63 +18,63 @@ import { environment } from 'src/environments/environment'; // The generator has a pretty long name, so we're going to shorten it. export type ConnectionMethod = ToolSessionConnectionOutputMethodsInner; -export type ToolSessionProvisioningConfiguration = { +export interface ToolSessionProvisioningConfiguration { max_number_of_models?: number; -}; +} -export type ToolSessionConnectionConfiguration = { +export interface ToolSessionConnectionConfiguration { methods: ConnectionMethod[]; -}; +} -export type WorkspaceConfiguration = { +export interface WorkspaceConfiguration { mounting_enabled: boolean; -}; +} -export type ToolSessionConfiguration = { +export interface ToolSessionConfiguration { connection: ToolSessionConnectionConfiguration; provisioning: ToolSessionProvisioningConfiguration; persistent_workspaces: WorkspaceConfiguration; -}; +} -export type CreateTool = { +export interface CreateTool { name: string; integrations: ToolIntegrations; config: ToolSessionConfiguration; -}; +} -export type ToolIntegrations = { +export interface ToolIntegrations { t4c: boolean | null; pure_variants: boolean | null; jupyter: boolean | null; -}; +} -export type CreateToolVersion = { +export interface CreateToolVersion { name: string; config: ToolVersionConfig; -}; +} -export type ToolVersionConfig = { +export interface ToolVersionConfig { is_recommended: boolean; is_deprecated: boolean; compatible_versions: number[]; -}; +} export type ToolVersionWithTool = ToolVersion & { tool: Tool }; -export type CreateToolNature = { +export interface CreateToolNature { name: string; -}; +} -export type ToolExtended = { +export interface ToolExtended { natures: ToolNature[]; versions: ToolVersion[]; -}; +} -export type ToolDockerimages = { +export interface ToolDockerimages { persistent: string; readonly: string | undefined; backup: string | undefined; -}; +} @Injectable({ providedIn: 'root', diff --git a/frontend/src/app/settings/core/tools-settings/tools-settings.component.ts b/frontend/src/app/settings/core/tools-settings/tools-settings.component.ts index e121649f3e..1cf06ef822 100644 --- a/frontend/src/app/settings/core/tools-settings/tools-settings.component.ts +++ b/frontend/src/app/settings/core/tools-settings/tools-settings.component.ts @@ -20,7 +20,7 @@ import { ToolExtended, ToolWrapperService } from './tool.service'; imports: [RouterLink, MatRipple, MatIconComponent, NgFor, NgIf, MatIcon], }) export class ToolsSettingsComponent { - tools: { [id: string]: ToolExtended } = {}; + tools: Record = {}; constructor(public toolService: ToolWrapperService) { this.tools = {}; diff --git a/frontend/src/app/settings/integrations/pure-variants/service/pure-variants.service.ts b/frontend/src/app/settings/integrations/pure-variants/service/pure-variants.service.ts index 6d6480564f..9c8a290600 100644 --- a/frontend/src/app/settings/integrations/pure-variants/service/pure-variants.service.ts +++ b/frontend/src/app/settings/integrations/pure-variants/service/pure-variants.service.ts @@ -41,7 +41,7 @@ export class PureVariantsService { } } -export type PureVariantsConfiguration = { +export interface PureVariantsConfiguration { license_server_url?: string; license_key_filename: string; -}; +} diff --git a/frontend/src/app/settings/modelsources/git-settings/service/git-instances.service.ts b/frontend/src/app/settings/modelsources/git-settings/service/git-instances.service.ts index b0a4ff0d4a..b2047a3638 100644 --- a/frontend/src/app/settings/modelsources/git-settings/service/git-instances.service.ts +++ b/frontend/src/app/settings/modelsources/git-settings/service/git-instances.service.ts @@ -88,7 +88,7 @@ export class GitInstancesService { } asyncNameValidator(ignoreInstance?: GitInstance): AsyncValidatorFn { - const ignoreId = !!ignoreInstance ? ignoreInstance.id : -1; + const ignoreId = ignoreInstance ? ignoreInstance.id : -1; return (control: AbstractControl): Observable => { return this.gitInstances$.pipe( take(1), @@ -104,23 +104,23 @@ export class GitInstancesService { } } -export type BackendBasicGitInstance = { +export interface BackendBasicGitInstance { id: number; name: string; url: string; api_url?: string; type: GitType; -}; +} export type BasicGitInstance = Omit; -export type GitInstance = { +export interface GitInstance { id: number; name: string; url: string; apiURL?: string; type: GitType; -}; +} export type GitType = 'general' | 'gitlab' | 'github' | 'azuredevops'; diff --git a/frontend/src/app/users/basic-auth-service/basic-auth-token.service.ts b/frontend/src/app/users/basic-auth-service/basic-auth-token.service.ts index 8eb932f87a..24c5296474 100644 --- a/frontend/src/app/users/basic-auth-service/basic-auth-token.service.ts +++ b/frontend/src/app/users/basic-auth-service/basic-auth-token.service.ts @@ -51,12 +51,12 @@ export class TokenService { } } -export type Token = { +export interface Token { description: string; expiration_date: string; source: string; id: number; -}; +} export type CreateTokenResponse = Token & { password: string; diff --git a/frontend/src/app/users/users-profile/user-workspaces/user-workspaces.component.ts b/frontend/src/app/users/users-profile/user-workspaces/user-workspaces.component.ts index 2ac619125d..963520c2c2 100644 --- a/frontend/src/app/users/users-profile/user-workspaces/user-workspaces.component.ts +++ b/frontend/src/app/users/users-profile/user-workspaces/user-workspaces.component.ts @@ -42,6 +42,10 @@ export class UserWorkspacesComponent { this.reloadWorkspaces(); } + get user(): User | undefined { + return this._user; + } + reloadWorkspaces() { this.workspaces = undefined; if ( @@ -59,10 +63,6 @@ export class UserWorkspacesComponent { }); } - get user(): User | undefined { - return this._user; - } - constructor( public userService: UserWrapperService, private usersService: UsersService, diff --git a/frontend/src/storybook/diagram.ts b/frontend/src/storybook/diagram.ts index 19bae480a0..3392bb8835 100644 --- a/frontend/src/storybook/diagram.ts +++ b/frontend/src/storybook/diagram.ts @@ -3,5 +3,5 @@ * SPDX-License-Identifier: Apache-2.0 */ -export const base64ModelDiagram: string = +export const base64ModelDiagram = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWxuczpkaWFncmFtPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3Npcml1cy9kaWFncmFtLzEuMS4wIiBzdHJva2UtZGFzaGFycmF5PSJub25lIiBzaGFwZS1yZW5kZXJpbmc9ImF1dG8iIGZvbnQtZmFtaWx5PSInT3BlbiBTYW5zJywnU2Vnb2UgVUknLEFyaWFsLHNhbnMtc2VyaWYiIHdpZHRoPSI0MTAiIHRleHQtcmVuZGVyaW5nPSJhdXRvIiBmaWxsLW9wYWNpdHk9IjEiIGNvbnRlbnRTY3JpcHRUeXBlPSJ0ZXh0L2VjbWFzY3JpcHQiIGNvbG9yLWludGVycG9sYXRpb249ImF1dG8iIGNvbG9yLXJlbmRlcmluZz0iYXV0byIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pZFlNaWQgbWVldCIgZm9udC1zaXplPSIxMnB4IiBkaWFncmFtOnNlbWFudGljUm9vdD0icGxhdGZvcm06L3Jlc291cmNlL21haW5fbW9kZWwvY29mZmVlLW1hY2hpbmUtZGVtby5jYXBlbGxhIzZjZjY2ZDVkLTI2ODgtNDk5Mi05MDEwLTFmZWFhMmIzY2U4NiIgdmlld0JveD0iMCAwIDQxMCA3NjkiIGZpbGw9ImJsYWNrIiBzdHJva2U9ImJsYWNrIiBpbWFnZS1yZW5kZXJpbmc9ImF1dG8iIHpvb21BbmRQYW49Im1hZ25pZnkiIHZlcnNpb249IjEuMCIgc3Ryb2tlLWxpbmVjYXA9InNxdWFyZSIgc3Ryb2tlLWxpbmVqb2luPSJtaXRlciIgY29udGVudFN0eWxlVHlwZT0idGV4dC9jc3MiIGZvbnQtc3R5bGU9Im5vcm1hbCIgaGVpZ2h0PSI3NjkiIHN0cm9rZS13aWR0aD0iMSIgc3Ryb2tlLWRhc2hvZmZzZXQ9IjAiIGZvbnQtd2VpZ2h0PSJub3JtYWwiIHN0cm9rZS1vcGFjaXR5PSIxIj4KICAgIDwhLS1HZW5lcmF0ZWQgYnkgdGhlIEJhdGlrIEdyYXBoaWNzMkQgU1ZHIEdlbmVyYXRvci0tPgogICAgPGRlZnMgaWQ9ImdlbmVyaWNEZWZzIi8+CiAgICA8Zz4KICAgICAgICA8ZyBmaWxsPSJ1cmwoI2xpbmVhckdyYWRpZW50MSkiIGZvbnQtc2l6ZT0iMTBweCIgc3Ryb2tlLXdpZHRoPSIwIiBzdHJva2U9InVybCgjbGluZWFyR3JhZGllbnQxKSIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCI+CiAgICAgICAgICAgIDxyZWN0IHg9IjEwIiBkaWFncmFtOnNlbWFudGljVGFyZ2V0SWQ9ImY2ODRlMzc0LWE0NDYtNDRlMi05YzAwLTk2M2FmOWVjZTUwYiIgeT0iODMiIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDEpIiB3aWR0aD0iMzkwIiByeD0iMCIgcnk9IjAiIGhlaWdodD0iMjc3IiBzdHJva2U9Im5vbmUiLz4KICAgICAgICA8L2c+CiAgICAgICAgPGcgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQiIGZvbnQtc2l6ZT0iMTBweCIgc3Ryb2tlLXdpZHRoPSIxLjEiPgogICAgICAgICAgICA8cmVjdCB4PSIxMCIgZGlhZ3JhbTpzZW1hbnRpY1RhcmdldElkPSJmNjg0ZTM3NC1hNDQ2LTQ0ZTItOWMwMC05NjNhZjllY2U1MGIiIHk9IjgzIiBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGgxKSIgZmlsbD0ibm9uZSIgd2lkdGg9IjM4OSIgcng9IjAiIHJ5PSIwIiBoZWlnaHQ9IjI3NiIvPgogICAgICAgICAgICA8bGluZSBkaWFncmFtOnNlbWFudGljVGFyZ2V0SWQ9Im5vbmUiIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDEpIiBmaWxsPSJub25lIiB4MT0iMTEiIHgyPSIzNSIgeTE9IjEwNiIgeTI9IjEwNiIvPgogICAgICAgICAgICA8bGluZSBkaWFncmFtOnNlbWFudGljVGFyZ2V0SWQ9Im5vbmUiIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDEpIiBmaWxsPSJub25lIiB4MT0iMzUiIHgyPSIzNSIgeTE9IjEwNiIgeTI9IjEwNiIvPgogICAgICAgICAgICA8bGluZSBkaWFncmFtOnNlbWFudGljVGFyZ2V0SWQ9Im5vbmUiIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDEpIiBmaWxsPSJub25lIiB4MT0iMzUiIHgyPSI0MCIgeTE9IjEwNiIgeTI9IjEwMSIvPgogICAgICAgICAgICA8bGluZSBkaWFncmFtOnNlbWFudGljVGFyZ2V0SWQ9Im5vbmUiIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDEpIiBmaWxsPSJub25lIiB4MT0iNDAiIHgyPSI0MCIgeTE9IjEwMSIgeTI9IjEwMSIvPgogICAgICAgICAgICA8bGluZSBkaWFncmFtOnNlbWFudGljVGFyZ2V0SWQ9Im5vbmUiIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDEpIiBmaWxsPSJub25lIiB4MT0iNDAiIHgyPSI0MCIgeTE9IjEwMSIgeTI9IjgzIi8+CiAgICAgICAgICAgIDxyZWN0IHg9IjE2NyIgeT0iMTAiIGRpYWdyYW06c2VtYW50aWNUYXJnZXRJZD0iY2E2NTAyNGQtMTRkYi00OTcxLTg0ODEtZGFiZGRiYTEwMWE5IiBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGgyKSIgZmlsbD0icmdiKDE1MCwxNzcsMjE4KSIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIyOCIgc3Ryb2tlPSJub25lIi8+CiAgICAgICAgICAgIDxyZWN0IHg9IjE2NyIgeT0iMTAiIGRpYWdyYW06c2VtYW50aWNUYXJnZXRJZD0iY2E2NTAyNGQtMTRkYi00OTcxLTg0ODEtZGFiZGRiYTEwMWE5IiBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGgyKSIgZmlsbD0ibm9uZSIgd2lkdGg9Ijk5IiBoZWlnaHQ9IjI3IiBzdHJva2U9InJnYig3NCw3NCwxNTEpIi8+CiAgICAgICAgICAgIDxpbWFnZSBkaWFncmFtOnNlbWFudGljVGFyZ2V0SWQ9ImNhNjUwMjRkLTE0ZGItNDk3MS04NDgxLWRhYmRkYmExMDFhOSIgc3Ryb2tlPSJyZ2IoNzQsNzQsMTUxKSIgd2lkdGg9IjE2IiB4bGluazpzaG93PSJlbWJlZCIgeGxpbms6dHlwZT0ic2ltcGxlIiBmaWxsPSJyZ2IoNzQsNzQsMTUxKSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSIgaGVpZ2h0PSIxNiIgeD0iMTg4IiB5PSIxNyIgeGxpbms6aHJlZj0iZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQ0FZQUFBQWY4LzloQUFBQWIwbEVRVlI0WHAyUUNRNkEmIzEwO01BZ0UrM1lleWxmUU5TbEJvSUJPc3JIWFRsUFhpa2lURmptQlBTSnFKYjZuWUc4a3FESVJXTFJrNHc5Vi9MN1YmIzEwO2pqOEx3QzZNQk9GSCtaUUNaaGFmZTFtL1NDTHc4eGU3L0l5UlJBQ3l0WUFWbkZLaWd1S1pKYWNuak1vZ0ZVekwmIzEwO0lCVllMbWhNMEVpNGlHRXdBQUFBQUVsRlRrU3VRbUNDIiB4bGluazphY3R1YXRlPSJvbkxvYWQiLz4KICAgICAgICAgICAgPHRleHQgeD0iMjA3IiB4bWw6c3BhY2U9InByZXNlcnZlIiB5PSIyOCIgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoNCkiIGRpYWdyYW06c2VtYW50aWNUYXJnZXRJZD0iY2E2NTAyNGQtMTRkYi00OTcxLTg0ODEtZGFiZGRiYTEwMWE5IiBzdHJva2U9Im5vbmUiPlN5c3RlbTwvdGV4dD4KICAgICAgICAgICAgPGxpbmUgZGlhZ3JhbTpzZW1hbnRpY1RhcmdldElkPSJjYTY1MDI0ZC0xNGRiLTQ5NzEtODQ4MS1kYWJkZGJhMTAxYTkiIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDUpIiBmaWxsPSJub25lIiB4MT0iMjE2IiB4Mj0iMjE2IiB5MT0iMzgiIHkyPSI3NDkiIHN0cm9rZS1kYXNoYXJyYXk9IjEwLDEwIiBzdHJva2U9ImdyYXkiLz4KICAgICAgICA8L2c+CiAgICAgICAgPGcgZmlsbD0iZ3JheSIgc3Ryb2tlLWRhc2hhcnJheT0iMTAsMTAiIHN0cm9rZS13aWR0aD0iMS4xIiBzdHJva2UtbGluZWNhcD0iYnV0dCIgc3Ryb2tlPSJncmF5Ij4KICAgICAgICAgICAgPHVzZSBkaWFncmFtOnNlbWFudGljVGFyZ2V0SWQ9ImNhNjUwMjRkLTE0ZGItNDk3MS04NDgxLWRhYmRkYmExMDFhOSIgc3Ryb2tlPSJibGFjayIgd2lkdGg9IjEwIiB4bGluazpzaG93PSJlbWJlZCIgeGxpbms6dHlwZT0ic2ltcGxlIiBmaWxsPSJibGFjayIgc3Ryb2tlLXdpZHRoPSIwIiBoZWlnaHQ9IjEwIiB4PSIyMTIiIHk9Ijc0OSIgeGxpbms6aHJlZj0iI2QzNjQxNWU4LTQyZGEtNDVkZS05NDdmLWU5NThhNWFkYjhkMCIgeGxpbms6YWN0dWF0ZT0ib25Mb2FkIi8+CiAgICAgICAgICAgIDxyZWN0IHg9IjIxMiIgeT0iNDIyIiBkaWFncmFtOnNlbWFudGljVGFyZ2V0SWQ9ImE5ZjlmNzAwLWRiYmMtNDhiOC05Y2RhLWUyZGFjOTgwNWFiMiIgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoNykiIGZpbGw9InJnYigxOTcsMjU1LDE2NikiIHdpZHRoPSIxMCIgaGVpZ2h0PSIyMTMiIHN0cm9rZT0ibm9uZSIvPgogICAgICAgICAgICA8cmVjdCB4PSIyMTIiIHk9IjQyMiIgZGlhZ3JhbTpzZW1hbnRpY1RhcmdldElkPSJhOWY5ZjcwMC1kYmJjLTQ4YjgtOWNkYS1lMmRhYzk4MDVhYjIiIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDcpIiBmaWxsPSJub25lIiB3aWR0aD0iOSIgc3Ryb2tlLWRhc2hhcnJheT0ibm9uZSIgaGVpZ2h0PSIyMTIiIHN0cm9rZT0icmdiKDksOTIsNDYpIi8+CiAgICAgICAgICAgIDxyZWN0IHg9IjE2NyIgeT0iNDYyIiBkaWFncmFtOnNlbWFudGljVGFyZ2V0SWQ9ImRlYWNiMmYyLTdmZWQtNDNhZi1hNmM5LTBhMjk5YjcwMmJkYyIgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoOCkiIGZpbGw9InJnYigxOTcsMjU1LDE2NikiIHdpZHRoPSIxMDAiIHN0cm9rZS1kYXNoYXJyYXk9Im5vbmUiIGhlaWdodD0iMjIiIHN0cm9rZT0ibm9uZSIvPgogICAgICAgICAgICA8cmVjdCB4PSIxNjciIHk9IjQ2MiIgZGlhZ3JhbTpzZW1hbnRpY1RhcmdldElkPSJkZWFjYjJmMi03ZmVkLTQzYWYtYTZjOS0wYTI5OWI3MDJiZGMiIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDgpIiBmaWxsPSJub25lIiB3aWR0aD0iOTkiIHN0cm9rZS1kYXNoYXJyYXk9Im5vbmUiIGhlaWdodD0iMjEiIHN0cm9rZT0icmdiKDksOTIsNDYpIi8+CiAgICAgICAgPC9nPgogICAgICAgIDxnIGZpbGw9InJnYig5LDkyLDQ2KSIgZm9udC1zaXplPSIxMHB4IiBzdHJva2Utd2lkdGg9IjEuMSIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQiIHN0cm9rZT0icmdiKDksOTIsNDYpIj4KICAgICAgICAgICAgPHRleHQgeD0iMTg0IiB4bWw6c3BhY2U9InByZXNlcnZlIiB5PSI0NzciIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDkpIiBkaWFncmFtOnNlbWFudGljVGFyZ2V0SWQ9ImRlYWNiMmYyLTdmZWQtNDNhZi1hNmM5LTBhMjk5YjcwMmJkYyIgc3Ryb2tlPSJub25lIj5tYWtlIGNvZmZlZTwvdGV4dD4KICAgICAgICAgICAgPGVsbGlwc2UgZGlhZ3JhbTpzZW1hbnRpY1RhcmdldElkPSI3Y2UxOGZkNS0zMmE4LTQyYzItOTBhOC0zYzYzZmE4NjViNzUiIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDEwKSIgZmlsbD0icmdiKDIyOCwyMjgsMjI4KSIgcng9IjQ5LjUiIGN4PSIyMTYuNSIgcnk9IjE0LjUiIGN5PSI0NDEuNSIgc3Ryb2tlPSJub25lIi8+CiAgICAgICAgPC9nPgogICAgICAgIDxnIGZpbGw9InJnYigxMTcsMTE3LDExNykiIHN0cm9rZS13aWR0aD0iMC4xIiBzdHJva2UtbGluZWNhcD0iYnV0dCIgc3Ryb2tlPSJyZ2IoMTE3LDExNywxMTcpIj4KICAgICAgICAgICAgPGVsbGlwc2UgZGlhZ3JhbTpzZW1hbnRpY1RhcmdldElkPSI3Y2UxOGZkNS0zMmE4LTQyYzItOTBhOC0zYzYzZmE4NjViNzUiIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDEwKSIgZmlsbD0ibm9uZSIgcng9IjQ5LjUiIGN4PSIyMTYuNSIgcnk9IjE0LjUiIGN5PSI0NDEuNSIvPgogICAgICAgICAgICA8dGV4dCB4PSIyMDQiIGZvbnQtc2l6ZT0iMTBweCIgZGlhZ3JhbTpzZW1hbnRpY1RhcmdldElkPSI3Y2UxOGZkNS0zMmE4LTQyYzItOTBhOC0zYzYzZmE4NjViNzUiIHk9IjQ0NSIgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoMTEpIiBmaWxsPSJibGFjayIgc3Ryb2tlPSJub25lIiB4bWw6c3BhY2U9InByZXNlcnZlIj5CdXN5PC90ZXh0PgogICAgICAgICAgICA8cmVjdCB4PSIyMTIiIHk9IjY0IiBkaWFncmFtOnNlbWFudGljVGFyZ2V0SWQ9ImQzYzA3MTkxLTYxNzgtNGNlNy05NWMzLWNhYTgxYjZhNzVhNSIgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoMTIpIiBmaWxsPSJyZ2IoMTk3LDI1NSwxNjYpIiB3aWR0aD0iMTAiIGhlaWdodD0iMTQiIHN0cm9rZT0ibm9uZSIvPgogICAgICAgICAgICA8cmVjdCB4PSIyMTIiIHk9IjY0IiBkaWFncmFtOnNlbWFudGljVGFyZ2V0SWQ9ImQzYzA3MTkxLTYxNzgtNGNlNy05NWMzLWNhYTgxYjZhNzVhNSIgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoMTIpIiBmaWxsPSJub25lIiB3aWR0aD0iOSIgaGVpZ2h0PSIxMyIgc3Ryb2tlPSJyZ2IoOSw5Miw0NikiIHN0cm9rZS13aWR0aD0iMS4xIi8+CiAgICAgICAgICAgIDxyZWN0IHg9IjIxMiIgeT0iMjQxIiBkaWFncmFtOnNlbWFudGljVGFyZ2V0SWQ9ImI0NzM4OGM3LTFlMDMtNGRjNi1iNGY5LWQ0YmZhZTk0Nzc4YyIgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoMTMpIiBmaWxsPSJyZ2IoMTk3LDI1NSwxNjYpIiB3aWR0aD0iMTAiIGhlaWdodD0iNTIiIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxLjEiLz4KICAgICAgICAgICAgPHJlY3QgeD0iMjEyIiB5PSIyNDEiIGRpYWdyYW06c2VtYW50aWNUYXJnZXRJZD0iYjQ3Mzg4YzctMWUwMy00ZGM2LWI0ZjktZDRiZmFlOTQ3NzhjIiBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGgxMykiIGZpbGw9Im5vbmUiIHdpZHRoPSI5IiBoZWlnaHQ9IjUxIiBzdHJva2U9InJnYig5LDkyLDQ2KSIgc3Ryb2tlLXdpZHRoPSIxLjEiLz4KICAgICAgICAgICAgPHJlY3QgeD0iMTY3IiB5PSIyNDYiIGRpYWdyYW06c2VtYW50aWNUYXJnZXRJZD0iNzFjN2IwNDAtM2NiMC00YjZhLTk1MzctODdjMzc3MDc5NDI2IiBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGgxNCkiIGZpbGw9InJnYigxOTcsMjU1LDE2NikiIHdpZHRoPSIxMDAiIGhlaWdodD0iMjAiIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxLjEiLz4KICAgICAgICAgICAgPHJlY3QgeD0iMTY3IiB5PSIyNDYiIGRpYWdyYW06c2VtYW50aWNUYXJnZXRJZD0iNzFjN2IwNDAtM2NiMC00YjZhLTk1MzctODdjMzc3MDc5NDI2IiBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGgxNCkiIGZpbGw9Im5vbmUiIHdpZHRoPSI5OSIgaGVpZ2h0PSIxOSIgc3Ryb2tlPSJyZ2IoOSw5Miw0NikiIHN0cm9rZS13aWR0aD0iMS4xIi8+CiAgICAgICAgPC9nPgogICAgICAgIDxnIGZpbGw9InJnYig5LDkyLDQ2KSIgZm9udC1zaXplPSIxMHB4IiBzdHJva2Utd2lkdGg9IjEuMSIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQiIHN0cm9rZT0icmdiKDksOTIsNDYpIj4KICAgICAgICAgICAgPHRleHQgeD0iMTc0IiB4bWw6c3BhY2U9InByZXNlcnZlIiB5PSIyNjAiIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDE1KSIgZGlhZ3JhbTpzZW1hbnRpY1RhcmdldElkPSI3MWM3YjA0MC0zY2IwLTRiNmEtOTUzNy04N2MzNzcwNzk0MjYiIHN0cm9rZT0ibm9uZSI+aGFuZGxlIHN1cHBsaWVzPC90ZXh0PgogICAgICAgICAgICA8ZWxsaXBzZSBkaWFncmFtOnNlbWFudGljVGFyZ2V0SWQ9IjA4MzgxMjdhLWZlN2QtNDNiNi1hOTdmLTk2Mjc1MGM5ZjI0YSIgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoMTYpIiBmaWxsPSJyZ2IoMjI4LDIyOCwyMjgpIiByeD0iNDkuNSIgY3g9IjIxNi41IiByeT0iMTQuNSIgY3k9IjEzMi41IiBzdHJva2U9Im5vbmUiLz4KICAgICAgICA8L2c+CiAgICAgICAgPGcgZmlsbD0icmdiKDExNywxMTcsMTE3KSIgc3Ryb2tlLXdpZHRoPSIwLjEiIHN0cm9rZS1saW5lY2FwPSJidXR0IiBzdHJva2U9InJnYigxMTcsMTE3LDExNykiPgogICAgICAgICAgICA8ZWxsaXBzZSBkaWFncmFtOnNlbWFudGljVGFyZ2V0SWQ9IjA4MzgxMjdhLWZlN2QtNDNiNi1hOTdmLTk2Mjc1MGM5ZjI0YSIgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoMTYpIiBmaWxsPSJub25lIiByeD0iNDkuNSIgY3g9IjIxNi41IiByeT0iMTQuNSIgY3k9IjEzMi41Ii8+CiAgICAgICAgICAgIDx0ZXh0IHg9IjE2OSIgZm9udC1zaXplPSIxMHB4IiBkaWFncmFtOnNlbWFudGljVGFyZ2V0SWQ9IjA4MzgxMjdhLWZlN2QtNDNiNi1hOTdmLTk2Mjc1MGM5ZjI0YSIgeT0iMTM2IiBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGgxNykiIGZpbGw9ImJsYWNrIiBzdHJva2U9Im5vbmUiIHhtbDpzcGFjZT0icHJlc2VydmUiPlN1cHBsaWVzIHJlcXVpcmVkPC90ZXh0PgogICAgICAgICAgICA8ZWxsaXBzZSBkaWFncmFtOnNlbWFudGljVGFyZ2V0SWQ9IjRmMDI2NjEyLWJkN2UtNDI0Mi04ODhiLTg5NWE5MTEyYmQxNCIgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoMTgpIiBmaWxsPSJyZ2IoMjI4LDIyOCwyMjgpIiByeD0iNDkuNSIgY3g9IjIxNi41IiByeT0iMjUuNSIgY3k9IjMyOC41IiBzdHJva2U9Im5vbmUiLz4KICAgICAgICAgICAgPGVsbGlwc2UgZGlhZ3JhbTpzZW1hbnRpY1RhcmdldElkPSI0ZjAyNjYxMi1iZDdlLTQyNDItODg4Yi04OTVhOTExMmJkMTQiIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDE4KSIgZmlsbD0ibm9uZSIgcng9IjQ5LjUiIGN4PSIyMTYuNSIgcnk9IjI1LjUiIGN5PSIzMjguNSIvPgogICAgICAgICAgICA8dGV4dCB4PSIxNjgiIGZvbnQtc2l6ZT0iMTBweCIgZGlhZ3JhbTpzZW1hbnRpY1RhcmdldElkPSI0ZjAyNjYxMi1iZDdlLTQyNDItODg4Yi04OTVhOTExMmJkMTQiIHk9IjMzMiIgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoMTkpIiBmaWxsPSJibGFjayIgc3Ryb2tlPSJub25lIiB4bWw6c3BhY2U9InByZXNlcnZlIj5SZWFkeSBmb3IgcmVxdWVzdDwvdGV4dD4KICAgICAgICAgICAgPGVsbGlwc2UgZGlhZ3JhbTpzZW1hbnRpY1RhcmdldElkPSI0OTcxYjhmOS1jYTk4LTQyYTYtODAxYi00ZDdkZWJmYjQwYzQiIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDIwKSIgZmlsbD0icmdiKDIyOCwyMjgsMjI4KSIgcng9IjQ5LjUiIGN4PSIyMTYuNSIgcnk9IjE0LjUiIGN5PSI2NzguNSIgc3Ryb2tlPSJub25lIi8+CiAgICAgICAgICAgIDxlbGxpcHNlIGRpYWdyYW06c2VtYW50aWNUYXJnZXRJZD0iNDk3MWI4ZjktY2E5OC00MmE2LTgwMWItNGQ3ZGViZmI0MGM0IiBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGgyMCkiIGZpbGw9Im5vbmUiIHJ4PSI0OS41IiBjeD0iMjE2LjUiIHJ5PSIxNC41IiBjeT0iNjc4LjUiLz4KICAgICAgICAgICAgPHRleHQgeD0iMTY4IiBmb250LXNpemU9IjEwcHgiIGRpYWdyYW06c2VtYW50aWNUYXJnZXRJZD0iNDk3MWI4ZjktY2E5OC00MmE2LTgwMWItNGQ3ZGViZmI0MGM0IiB5PSI2ODIiIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDIxKSIgZmlsbD0iYmxhY2siIHN0cm9rZT0ibm9uZSIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+UmVhZHkgZm9yIHJlcXVlc3Q8L3RleHQ+CiAgICAgICAgICAgIDxyZWN0IHg9IjE2NyIgeT0iMTUzIiBkaWFncmFtOnNlbWFudGljVGFyZ2V0SWQ9IjNiZGMzNDQzLTk5OTUtNDY5ZC1hNGVmLTY2M2JiZWExZmIxNiIgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoMjIpIiBmaWxsPSJyZ2IoMTk3LDI1NSwxNjYpIiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjMwIiBzdHJva2U9Im5vbmUiLz4KICAgICAgICAgICAgPHJlY3QgeD0iMTY3IiB5PSIxNTMiIGRpYWdyYW06c2VtYW50aWNUYXJnZXRJZD0iM2JkYzM0NDMtOTk5NS00NjlkLWE0ZWYtNjYzYmJlYTFmYjE2IiBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGgyMikiIGZpbGw9Im5vbmUiIHdpZHRoPSI5OSIgaGVpZ2h0PSIyOSIgc3Ryb2tlPSJyZ2IoOSw5Miw0NikiIHN0cm9rZS13aWR0aD0iMS4xIi8+CiAgICAgICAgPC9nPgogICAgICAgIDxnIGZpbGw9InJnYig5LDkyLDQ2KSIgZm9udC1zaXplPSIxMHB4IiBzdHJva2Utd2lkdGg9IjEuMSIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQiIHN0cm9rZT0icmdiKDksOTIsNDYpIj4KICAgICAgICAgICAgPHRleHQgeD0iMTgyIiB4bWw6c3BhY2U9InByZXNlcnZlIiB5PSIxNjYiIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDIzKSIgZGlhZ3JhbTpzZW1hbnRpY1RhcmdldElkPSIzYmRjMzQ0My05OTk1LTQ2OWQtYTRlZi02NjNiYmVhMWZiMTYiIHN0cm9rZT0ibm9uZSI+cmVxdWVzdCB1c2VyIDwvdGV4dD4KICAgICAgICAgICAgPHRleHQgeD0iMjAxIiB4bWw6c3BhY2U9InByZXNlcnZlIiB5PSIxNzkiIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDIzKSIgZGlhZ3JhbTpzZW1hbnRpY1RhcmdldElkPSIzYmRjMzQ0My05OTk1LTQ2OWQtYTRlZi02NjNiYmVhMWZiMTYiIHN0cm9rZT0ibm9uZSI+YWN0aW9uPC90ZXh0PgogICAgICAgICAgICA8cmVjdCB4PSIzMDAiIHk9IjEwIiBkaWFncmFtOnNlbWFudGljVGFyZ2V0SWQ9IjU4ZjRjNzEwLWQ5OTAtNGY2MC1hOWY3LTgzZjY3ZjcyNGVkMCIgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoMjQpIiBmaWxsPSJyZ2IoMTk4LDIzMCwyNTUpIiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjI4IiBzdHJva2U9Im5vbmUiLz4KICAgICAgICAgICAgPHJlY3QgeD0iMzAwIiB5PSIxMCIgZGlhZ3JhbTpzZW1hbnRpY1RhcmdldElkPSI1OGY0YzcxMC1kOTkwLTRmNjAtYTlmNy04M2Y2N2Y3MjRlZDAiIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDI0KSIgZmlsbD0ibm9uZSIgd2lkdGg9Ijk5IiBoZWlnaHQ9IjI3IiBzdHJva2U9InJnYig3NCw3NCwxNTEpIi8+CiAgICAgICAgICAgIDxpbWFnZSBkaWFncmFtOnNlbWFudGljVGFyZ2V0SWQ9IjU4ZjRjNzEwLWQ5OTAtNGY2MC1hOWY3LTgzZjY3ZjcyNGVkMCIgc3Ryb2tlPSJyZ2IoNzQsNzQsMTUxKSIgd2lkdGg9IjE2IiB4bGluazpzaG93PSJlbWJlZCIgeGxpbms6dHlwZT0ic2ltcGxlIiBmaWxsPSJyZ2IoNzQsNzQsMTUxKSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSIgaGVpZ2h0PSIxNiIgeD0iMzA3IiB5PSIxNyIgeGxpbms6aHJlZj0iZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQ0FZQUFBQWY4LzloQUFBQWIwbEVRVlI0WHAyUUNRNkEmIzEwO01BZ0UrM1lleWxmUU5TbEJvSUJPc3JIWFRsUFhpa2lURmptQlBTSnFKYjZuWUc4a3FESVJXTFJrNHc5Vi9MN1YmIzEwO2pqOEx3QzZNQk9GSCtaUUNaaGFmZTFtL1NDTHc4eGU3L0l5UlJBQ3l0WUFWbkZLaWd1S1pKYWNuak1vZ0ZVekwmIzEwO0lCVllMbWhNMEVpNGlHRXdBQUFBQUVsRlRrU3VRbUNDIiB4bGluazphY3R1YXRlPSJvbkxvYWQiLz4KICAgICAgICAgICAgPHRleHQgeD0iMzI2IiBkaWFncmFtOnNlbWFudGljVGFyZ2V0SWQ9IjU4ZjRjNzEwLWQ5OTAtNGY2MC1hOWY3LTgzZjY3ZjcyNGVkMCIgeT0iMjgiIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDI2KSIgZmlsbD0iYmxhY2siIHN0cm9rZT0ibm9uZSIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+RW52aXJvbm1lbnQ8L3RleHQ+CiAgICAgICAgICAgIDxsaW5lIGRpYWdyYW06c2VtYW50aWNUYXJnZXRJZD0iNThmNGM3MTAtZDk5MC00ZjYwLWE5ZjctODNmNjdmNzI0ZWQwIiBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGgyNykiIGZpbGw9Im5vbmUiIHgxPSIzNDkiIHgyPSIzNDkiIHkxPSIzOCIgeTI9Ijc0OSIgc3Ryb2tlLWRhc2hhcnJheT0iMTAsMTAiIHN0cm9rZT0iZ3JheSIvPgogICAgICAgIDwvZz4KICAgICAgICA8ZyBmaWxsPSJncmF5IiBzdHJva2UtZGFzaGFycmF5PSIxMCwxMCIgc3Ryb2tlLXdpZHRoPSIxLjEiIHN0cm9rZS1saW5lY2FwPSJidXR0IiBzdHJva2U9ImdyYXkiPgogICAgICAgICAgICA8dXNlIGRpYWdyYW06c2VtYW50aWNUYXJnZXRJZD0iNThmNGM3MTAtZDk5MC00ZjYwLWE5ZjctODNmNjdmNzI0ZWQwIiBzdHJva2U9ImJsYWNrIiB3aWR0aD0iMTAiIHhsaW5rOnNob3c9ImVtYmVkIiB4bGluazp0eXBlPSJzaW1wbGUiIGZpbGw9ImJsYWNrIiBzdHJva2Utd2lkdGg9IjAiIGhlaWdodD0iMTAiIHg9IjM0NSIgeT0iNzQ5IiB4bGluazpocmVmPSIjZDM2NDE1ZTgtNDJkYS00NWRlLTk0N2YtZTk1OGE1YWRiOGQwIiB4bGluazphY3R1YXRlPSJvbkxvYWQiLz4KICAgICAgICAgICAgPHJlY3QgeD0iMzQ1IiB5PSI1MDciIGRpYWdyYW06c2VtYW50aWNUYXJnZXRJZD0iYzZjNDNmMjQtZWQ1My00NzJhLWE5YjktODI1ZThhZGMxODExIiBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGgyOSkiIGZpbGw9InJnYigxOTcsMjU1LDE2NikiIHdpZHRoPSIxMCIgaGVpZ2h0PSIxMTEiIHN0cm9rZT0ibm9uZSIvPgogICAgICAgICAgICA8cmVjdCB4PSIzNDUiIHk9IjUwNyIgZGlhZ3JhbTpzZW1hbnRpY1RhcmdldElkPSJjNmM0M2YyNC1lZDUzLTQ3MmEtYTliOS04MjVlOGFkYzE4MTEiIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDI5KSIgZmlsbD0ibm9uZSIgd2lkdGg9IjkiIHN0cm9rZS1kYXNoYXJyYXk9Im5vbmUiIGhlaWdodD0iMTEwIiBzdHJva2U9InJnYig5LDkyLDQ2KSIvPgogICAgICAgICAgICA8cmVjdCB4PSIzMDAiIHk9IjUzOSIgZGlhZ3JhbTpzZW1hbnRpY1RhcmdldElkPSI2OTQ0Y2U3MS1mYzE4LTRmZWUtODJiNC05YjAwMmFhMGZjZmUiIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDMwKSIgZmlsbD0icmdiKDE5NywyNTUsMTY2KSIgd2lkdGg9IjEwMCIgc3Ryb2tlLWRhc2hhcnJheT0ibm9uZSIgaGVpZ2h0PSI1NCIgc3Ryb2tlPSJub25lIi8+CiAgICAgICAgICAgIDxyZWN0IHg9IjMwMCIgeT0iNTM5IiBkaWFncmFtOnNlbWFudGljVGFyZ2V0SWQ9IjY5NDRjZTcxLWZjMTgtNGZlZS04MmI0LTliMDAyYWEwZmNmZSIgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoMzApIiBmaWxsPSJub25lIiB3aWR0aD0iOTkiIHN0cm9rZS1kYXNoYXJyYXk9Im5vbmUiIGhlaWdodD0iNTMiIHN0cm9rZT0icmdiKDksOTIsNDYpIi8+CiAgICAgICAgPC9nPgogICAgICAgIDxnIGZpbGw9InJnYig5LDkyLDQ2KSIgZm9udC1zaXplPSIxMHB4IiBzdHJva2Utd2lkdGg9IjEuMSIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQiIHN0cm9rZT0icmdiKDksOTIsNDYpIj4KICAgICAgICAgICAgPHRleHQgeD0iMzAyIiB4bWw6c3BhY2U9InByZXNlcnZlIiB5PSI1NjQiIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDMxKSIgZGlhZ3JhbTpzZW1hbnRpY1RhcmdldElkPSI2OTQ0Y2U3MS1mYzE4LTRmZWUtODJiNC05YjAwMmFhMGZjZmUiIHN0cm9rZT0ibm9uZSI+aGFuZGxlIG5vaXNlIGFuZCA8L3RleHQ+CiAgICAgICAgICAgIDx0ZXh0IHg9IjMyNyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgeT0iNTc3IiBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGgzMSkiIGRpYWdyYW06c2VtYW50aWNUYXJnZXRJZD0iNjk0NGNlNzEtZmMxOC00ZmVlLTgyYjQtOWIwMDJhYTBmY2ZlIiBzdHJva2U9Im5vbmUiPnZpYnJhdGlvbjwvdGV4dD4KICAgICAgICAgICAgPHJlY3QgeD0iMTAiIHk9IjEwIiBkaWFncmFtOnNlbWFudGljVGFyZ2V0SWQ9IjA2ODA5Yjc2LTdhNTYtNGJjNy1hYTA3LTI0OTkwYmI5N2FjYyIgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoMzIpIiBmaWxsPSJyZ2IoMTk4LDIzMCwyNTUpIiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjI4IiBzdHJva2U9Im5vbmUiLz4KICAgICAgICAgICAgPHJlY3QgeD0iMTAiIHk9IjEwIiBkaWFncmFtOnNlbWFudGljVGFyZ2V0SWQ9IjA2ODA5Yjc2LTdhNTYtNGJjNy1hYTA3LTI0OTkwYmI5N2FjYyIgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoMzIpIiBmaWxsPSJub25lIiB3aWR0aD0iOTkiIGhlaWdodD0iMjciIHN0cm9rZT0icmdiKDc0LDc0LDE1MSkiLz4KICAgICAgICAgICAgPGltYWdlIGRpYWdyYW06c2VtYW50aWNUYXJnZXRJZD0iMDY4MDliNzYtN2E1Ni00YmM3LWFhMDctMjQ5OTBiYjk3YWNjIiBzdHJva2U9InJnYig3NCw3NCwxNTEpIiB3aWR0aD0iMTYiIHhsaW5rOnNob3c9ImVtYmVkIiB4bGluazp0eXBlPSJzaW1wbGUiIGZpbGw9InJnYig3NCw3NCwxNTEpIiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJub25lIiBoZWlnaHQ9IjE2IiB4PSIzOSIgeT0iMTciIHhsaW5rOmhyZWY9ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUNBWUFBQUFmOC85aEFBQUFiMGxFUVZSNFhwMlFDUTZBJiMxMDtNQWdFKzNZZXlsZlFOU2xCb0lCT3NySFhUbFBYaWtpVEZqbUJQU0pxSmI2bllHOGtxRElSV0xSazR3OVYvTDdWJiMxMDtqajhMd0M2TUJPRkgrWlFDWmhhZmUxbS9TQ0x3OHhlNy9JeVJSQUN5dFlBVm5GS2lndUtaSmFjbmpNb2dGVXpMJiMxMDtJQlZZTG1oTTBFaTRpR0V3QUFBQUFFbEZUa1N1UW1DQyIgeGxpbms6YWN0dWF0ZT0ib25Mb2FkIi8+CiAgICAgICAgICAgIDx0ZXh0IHg9IjU4IiBkaWFncmFtOnNlbWFudGljVGFyZ2V0SWQ9IjA2ODA5Yjc2LTdhNTYtNGJjNy1hYTA3LTI0OTkwYmI5N2FjYyIgeT0iMjgiIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDM0KSIgZmlsbD0iYmxhY2siIHN0cm9rZT0ibm9uZSIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+VXNlcjwvdGV4dD4KICAgICAgICAgICAgPGxpbmUgZGlhZ3JhbTpzZW1hbnRpY1RhcmdldElkPSIwNjgwOWI3Ni03YTU2LTRiYzctYWEwNy0yNDk5MGJiOTdhY2MiIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDM1KSIgZmlsbD0ibm9uZSIgeDE9IjU5IiB4Mj0iNTkiIHkxPSIzOCIgeTI9Ijc0OSIgc3Ryb2tlLWRhc2hhcnJheT0iMTAsMTAiIHN0cm9rZT0iZ3JheSIvPgogICAgICAgIDwvZz4KICAgICAgICA8ZyBmaWxsPSJncmF5IiBzdHJva2UtZGFzaGFycmF5PSIxMCwxMCIgc3Ryb2tlLXdpZHRoPSIxLjEiIHN0cm9rZS1saW5lY2FwPSJidXR0IiBzdHJva2U9ImdyYXkiPgogICAgICAgICAgICA8dXNlIGRpYWdyYW06c2VtYW50aWNUYXJnZXRJZD0iMDY4MDliNzYtN2E1Ni00YmM3LWFhMDctMjQ5OTBiYjk3YWNjIiBzdHJva2U9ImJsYWNrIiB3aWR0aD0iMTAiIHhsaW5rOnNob3c9ImVtYmVkIiB4bGluazp0eXBlPSJzaW1wbGUiIGZpbGw9ImJsYWNrIiBzdHJva2Utd2lkdGg9IjAiIGhlaWdodD0iMTAiIHg9IjU1IiB5PSI3NDkiIHhsaW5rOmhyZWY9IiNkMzY0MTVlOC00MmRhLTQ1ZGUtOTQ3Zi1lOTU4YTVhZGI4ZDAiIHhsaW5rOmFjdHVhdGU9Im9uTG9hZCIvPgogICAgICAgICAgICA8cmVjdCB4PSI1NSIgeT0iNTM0IiBkaWFncmFtOnNlbWFudGljVGFyZ2V0SWQ9ImU5ZGIxNDZiLWU5NmItNGZmZC05N2I4LTcwMzYxMDFjMjE5ZSIgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoMzcpIiBmaWxsPSJyZ2IoMTk3LDI1NSwxNjYpIiB3aWR0aD0iMTAiIGhlaWdodD0iNzQiIHN0cm9rZT0ibm9uZSIvPgogICAgICAgICAgICA8cmVjdCB4PSI1NSIgeT0iNTM0IiBkaWFncmFtOnNlbWFudGljVGFyZ2V0SWQ9ImU5ZGIxNDZiLWU5NmItNGZmZC05N2I4LTcwMzYxMDFjMjE5ZSIgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoMzcpIiBmaWxsPSJub25lIiB3aWR0aD0iOSIgc3Ryb2tlLWRhc2hhcnJheT0ibm9uZSIgaGVpZ2h0PSI3MyIgc3Ryb2tlPSJyZ2IoOSw5Miw0NikiLz4KICAgICAgICAgICAgPHJlY3QgeD0iMTAiIHk9IjU1NyIgZGlhZ3JhbTpzZW1hbnRpY1RhcmdldElkPSJhOTQ2NzhkZS0zYmQ3LTQ5NmItOTdhNy1hNzYzMTJiMTQ0NGEiIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDM4KSIgZmlsbD0icmdiKDE5NywyNTUsMTY2KSIgd2lkdGg9IjEwMCIgc3Ryb2tlLWRhc2hhcnJheT0ibm9uZSIgaGVpZ2h0PSIyMSIgc3Ryb2tlPSJub25lIi8+CiAgICAgICAgICAgIDxyZWN0IHg9IjEwIiB5PSI1NTciIGRpYWdyYW06c2VtYW50aWNUYXJnZXRJZD0iYTk0Njc4ZGUtM2JkNy00OTZiLTk3YTctYTc2MzEyYjE0NDRhIiBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGgzOCkiIGZpbGw9Im5vbmUiIHdpZHRoPSI5OSIgc3Ryb2tlLWRhc2hhcnJheT0ibm9uZSIgaGVpZ2h0PSIyMCIgc3Ryb2tlPSJyZ2IoOSw5Miw0NikiLz4KICAgICAgICA8L2c+CiAgICAgICAgPGcgZmlsbD0icmdiKDksOTIsNDYpIiBmb250LXNpemU9IjEwcHgiIHN0cm9rZS13aWR0aD0iMS4xIiBzdHJva2UtbGluZWNhcD0iYnV0dCIgc3Ryb2tlPSJyZ2IoOSw5Miw0NikiPgogICAgICAgICAgICA8dGV4dCB4PSIxNyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgeT0iNTcyIiBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGgzOSkiIGRpYWdyYW06c2VtYW50aWNUYXJnZXRJZD0iYTk0Njc4ZGUtM2JkNy00OTZiLTk3YTctYTc2MzEyYjE0NDRhIiBzdHJva2U9Im5vbmUiPmNvbnN1bWUgY29mZmVlPC90ZXh0PgogICAgICAgICAgICA8cmVjdCB4PSI1NiIgeT0iNjIzIiBkaWFncmFtOnNlbWFudGljVGFyZ2V0SWQ9IjViY2ZmZTQ5LTUyMzktNGFmNi04OTdkLWM2OWQzZjc1NmNkNyIgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoNDApIiBmaWxsPSJyZ2IoMTk3LDI1NSwxNjYpIiB3aWR0aD0iOSIgaGVpZ2h0PSI3NiIgc3Ryb2tlPSJub25lIi8+CiAgICAgICAgICAgIDxyZWN0IHg9IjU2IiB5PSI2MjMiIGRpYWdyYW06c2VtYW50aWNUYXJnZXRJZD0iNWJjZmZlNDktNTIzOS00YWY2LTg5N2QtYzY5ZDNmNzU2Y2Q3IiBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGg0MCkiIGZpbGw9Im5vbmUiIHdpZHRoPSI4IiBoZWlnaHQ9Ijc1Ii8+CiAgICAgICAgICAgIDxyZWN0IHg9IjEwIiB5PSI2MjgiIGRpYWdyYW06c2VtYW50aWNUYXJnZXRJZD0iMmUzN2UwMTEtODJiMS00ODNmLWE3NjEtZTNmMTc3ZDYzZThjIiBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGg0MSkiIGZpbGw9InJnYigxOTcsMjU1LDE2NikiIHdpZHRoPSIxMDAiIGhlaWdodD0iNDEiIHN0cm9rZT0ibm9uZSIvPgogICAgICAgICAgICA8cmVjdCB4PSIxMCIgeT0iNjI4IiBkaWFncmFtOnNlbWFudGljVGFyZ2V0SWQ9IjJlMzdlMDExLTgyYjEtNDgzZi1hNzYxLWUzZjE3N2Q2M2U4YyIgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoNDEpIiBmaWxsPSJub25lIiB3aWR0aD0iOTkiIGhlaWdodD0iNDAiLz4KICAgICAgICAgICAgPHRleHQgeD0iMTUiIHhtbDpzcGFjZT0icHJlc2VydmUiIHk9IjY0NiIgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoNDIpIiBkaWFncmFtOnNlbWFudGljVGFyZ2V0SWQ9IjJlMzdlMDExLTgyYjEtNDgzZi1hNzYxLWUzZjE3N2Q2M2U4YyIgc3Ryb2tlPSJub25lIj5kaXNwb3NlIHByb2Nlc3MgPC90ZXh0PgogICAgICAgICAgICA8dGV4dCB4PSI0NCIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgeT0iNjU5IiBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGg0MykiIGRpYWdyYW06c2VtYW50aWNUYXJnZXRJZD0iMmUzN2UwMTEtODJiMS00ODNmLWE3NjEtZTNmMTc3ZDYzZThjIiBzdHJva2U9Im5vbmUiPndhc3RlPC90ZXh0PgogICAgICAgICAgICA8cmVjdCB4PSIxMCIgeT0iMzY1IiBkaWFncmFtOnNlbWFudGljVGFyZ2V0SWQ9ImI5OWY5ZDFlLTI4MjMtNDIwOC04MjM1LTFkNzZhOTVmMzM4NyIgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoNDQpIiBmaWxsPSJyZ2IoMTk3LDI1NSwxNjYpIiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjUyIiBzdHJva2U9Im5vbmUiLz4KICAgICAgICAgICAgPHJlY3QgeD0iMTAiIHk9IjM2NSIgZGlhZ3JhbTpzZW1hbnRpY1RhcmdldElkPSJiOTlmOWQxZS0yODIzLTQyMDgtODIzNS0xZDc2YTk1ZjMzODciIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDQ0KSIgZmlsbD0ibm9uZSIgd2lkdGg9Ijk5IiBoZWlnaHQ9IjUxIi8+CiAgICAgICAgICAgIDx0ZXh0IHg9IjIxIiB4bWw6c3BhY2U9InByZXNlcnZlIiB5PSIzOTUiIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDQ1KSIgZGlhZ3JhbTpzZW1hbnRpY1RhcmdldElkPSJiOTlmOWQxZS0yODIzLTQyMDgtODIzNS0xZDc2YTk1ZjMzODciIHN0cm9rZT0ibm9uZSI+cmVxdWVzdCBjb2ZmZWU8L3RleHQ+CiAgICAgICAgICAgIDxyZWN0IHg9IjU1IiB5PSIxODgiIGRpYWdyYW06c2VtYW50aWNUYXJnZXRJZD0iMTFlM2Y1NzItNmU4Ny00YjI1LTlmYjMtZTNmMjJlYmVhODc2IiBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGg0NikiIGZpbGw9InJnYigxOTcsMjU1LDE2NikiIHdpZHRoPSIxMCIgaGVpZ2h0PSI0MCIgc3Ryb2tlPSJub25lIi8+CiAgICAgICAgICAgIDxyZWN0IHg9IjU1IiB5PSIxODgiIGRpYWdyYW06c2VtYW50aWNUYXJnZXRJZD0iMTFlM2Y1NzItNmU4Ny00YjI1LTlmYjMtZTNmMjJlYmVhODc2IiBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGg0NikiIGZpbGw9Im5vbmUiIHdpZHRoPSI5IiBoZWlnaHQ9IjM5Ii8+CiAgICAgICAgICAgIDxyZWN0IHg9IjEwIiB5PSIxOTMiIGRpYWdyYW06c2VtYW50aWNUYXJnZXRJZD0iN2NlZWJmNGQtM2FlZS00ZDQyLTg4MmItMjllYzdlMjVkYThhIiBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGg0NykiIGZpbGw9InJnYigxOTcsMjU1LDE2NikiIHdpZHRoPSIxMDAiIGhlaWdodD0iMzAiIHN0cm9rZT0ibm9uZSIvPgogICAgICAgICAgICA8cmVjdCB4PSIxMCIgeT0iMTkzIiBkaWFncmFtOnNlbWFudGljVGFyZ2V0SWQ9IjdjZWViZjRkLTNhZWUtNGQ0Mi04ODJiLTI5ZWM3ZTI1ZGE4YSIgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoNDcpIiBmaWxsPSJub25lIiB3aWR0aD0iOTkiIGhlaWdodD0iMjkiLz4KICAgICAgICAgICAgPHRleHQgeD0iMjIiIHhtbDpzcGFjZT0icHJlc2VydmUiIHk9IjIwNiIgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoNDgpIiBkaWFncmFtOnNlbWFudGljVGFyZ2V0SWQ9IjdjZWViZjRkLTNhZWUtNGQ0Mi04ODJiLTI5ZWM3ZTI1ZGE4YSIgc3Ryb2tlPSJub25lIj5lbmFibGUgY29mZmVlIDwvdGV4dD4KICAgICAgICAgICAgPHRleHQgeD0iNDEiIHhtbDpzcGFjZT0icHJlc2VydmUiIHk9IjIxOSIgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoNDkpIiBkaWFncmFtOnNlbWFudGljVGFyZ2V0SWQ9IjdjZWViZjRkLTNhZWUtNGQ0Mi04ODJiLTI5ZWM3ZTI1ZGE4YSIgc3Ryb2tlPSJub25lIj5tYWtpbmc8L3RleHQ+CiAgICAgICAgICAgIDx1c2UgZGlhZ3JhbTpzZW1hbnRpY1RhcmdldElkPSI0NDNhNzViMi1kZDVjLTQ4YWQtOTdmYS1kYWJmNWIyZmFmOTEiIHN0cm9rZT0iYmxhY2siIHdpZHRoPSIxMCIgeGxpbms6c2hvdz0iZW1iZWQiIHhsaW5rOnR5cGU9InNpbXBsZSIgZmlsbD0iYmxhY2siIHN0cm9rZS13aWR0aD0iMCIgaGVpZ2h0PSIxMCIgeD0iMjEyIiB5PSI3MyIgZm9udC1zaXplPSIxMnB4IiB4bGluazpocmVmPSIjNGQwZGZjZGUtODFmMC00YjlhLWFkOGItYjE5NTMwYjk0YzI0IiB4bGluazphY3R1YXRlPSJvbkxvYWQiLz4KICAgICAgICAgICAgPHVzZSBkaWFncmFtOnNlbWFudGljVGFyZ2V0SWQ9Ijg3ZTQyNmE5LWZmMWMtNDdkYi05MTg2LWNkMjY3NDA5ZTYwMCIgc3Ryb2tlPSJibGFjayIgd2lkdGg9IjEwIiB4bGluazpzaG93PSJlbWJlZCIgeGxpbms6dHlwZT0ic2ltcGxlIiBmaWxsPSJibGFjayIgc3Ryb2tlLXdpZHRoPSIwIiBoZWlnaHQ9IjEwIiB4PSIyMTIiIHk9IjU5IiBmb250LXNpemU9IjEycHgiIHhsaW5rOmhyZWY9IiM0ZDBkZmNkZS04MWYwLTRiOWEtYWQ4Yi1iMTk1MzBiOTRjMjQiIHhsaW5rOmFjdHVhdGU9Im9uTG9hZCIvPgogICAgICAgICAgICA8dXNlIGRpYWdyYW06c2VtYW50aWNUYXJnZXRJZD0iYTk0Yzk1YTQtNjQ5OC00ZGU0LWJmYTEtMjNjYzJiOGMwNTg0IiBzdHJva2U9ImJsYWNrIiB3aWR0aD0iMTAiIHhsaW5rOnNob3c9ImVtYmVkIiB4bGluazp0eXBlPSJzaW1wbGUiIGZpbGw9ImJsYWNrIiBzdHJva2Utd2lkdGg9IjAiIGhlaWdodD0iMTAiIHg9IjIxMiIgeT0iNjMwIiBmb250LXNpemU9IjEycHgiIHhsaW5rOmhyZWY9IiM0ZDBkZmNkZS04MWYwLTRiOWEtYWQ4Yi1iMTk1MzBiOTRjMjQiIHhsaW5rOmFjdHVhdGU9Im9uTG9hZCIvPgogICAgICAgICAgICA8dXNlIGRpYWdyYW06c2VtYW50aWNUYXJnZXRJZD0iYmExNDU4ZjQtZjVmMy00OGE4LWE3YzMtODM1YTgyYTk0MGM1IiBzdHJva2U9ImJsYWNrIiB3aWR0aD0iMTAiIHhsaW5rOnNob3c9ImVtYmVkIiB4bGluazp0eXBlPSJzaW1wbGUiIGZpbGw9ImJsYWNrIiBzdHJva2Utd2lkdGg9IjAiIGhlaWdodD0iMTAiIHg9IjIxMiIgeT0iNDE3IiBmb250LXNpemU9IjEycHgiIHhsaW5rOmhyZWY9IiM0ZDBkZmNkZS04MWYwLTRiOWEtYWQ4Yi1iMTk1MzBiOTRjMjQiIHhsaW5rOmFjdHVhdGU9Im9uTG9hZCIvPgogICAgICAgICAgICA8bGluZSBkaWFncmFtOnNlbWFudGljVGFyZ2V0SWQ9IjQyNjZiOWY3LTBmODgtNGRhYi1iZTk0LTI2MzllYTQ3OTY3MyIgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoNTQpIiBmaWxsPSJub25lIiB4MT0iNjEiIHgyPSIyMTIiIHkxPSI0MjIiIHkyPSI0MjIiIHN0cm9rZT0iYmxhY2siLz4KICAgICAgICAgICAgPHRleHQgeD0iOTciIGRpYWdyYW06c2VtYW50aWNUYXJnZXRJZD0iNDI2NmI5ZjctMGY4OC00ZGFiLWJlOTQtMjYzOWVhNDc5NjczIiB5PSI0MTYiIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDU1KSIgZmlsbD0iYmxhY2siIHN0cm9rZT0ibm9uZSIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+Y29mZmVlIHJlcXVlc3Q8L3RleHQ+CiAgICAgICAgICAgIDxsaW5lIGRpYWdyYW06c2VtYW50aWNUYXJnZXRJZD0ibm9uZSIgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoNTYpIiBmaWxsPSJub25lIiB4MT0iMjA1IiB4Mj0iMjEyIiB5MT0iNDI1IiB5Mj0iNDIyIiBzdHJva2U9ImJsYWNrIi8+CiAgICAgICAgICAgIDxsaW5lIGRpYWdyYW06c2VtYW50aWNUYXJnZXRJZD0ibm9uZSIgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoNTYpIiBmaWxsPSJub25lIiB4MT0iMjEyIiB4Mj0iMjA1IiB5MT0iNDIyIiB5Mj0iNDE5IiBzdHJva2U9ImJsYWNrIi8+CiAgICAgICAgICAgIDxsaW5lIGRpYWdyYW06c2VtYW50aWNUYXJnZXRJZD0iY2NlNDcyMmYtZTRlMi00YmQxLWI2ODEtMzFmNDI2N2EyZjNhIiBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGg1NCkiIGZpbGw9Im5vbmUiIHgxPSIyMTIiIHgyPSIxNjciIHkxPSI1MzQiIHkyPSI1MzQiIHN0cm9rZT0iYmxhY2siLz4KICAgICAgICAgICAgPGxpbmUgZGlhZ3JhbTpzZW1hbnRpY1RhcmdldElkPSJjY2U0NzIyZi1lNGUyLTRiZDEtYjY4MS0zMWY0MjY3YTJmM2EiIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDU0KSIgZmlsbD0ibm9uZSIgeDE9IjE1NyIgeDI9IjY1IiB5MT0iNTM0IiB5Mj0iNTM0IiBzdHJva2U9ImJsYWNrIi8+CiAgICAgICAgICAgIDx0ZXh0IHg9IjEyMiIgZGlhZ3JhbTpzZW1hbnRpY1RhcmdldElkPSJjY2U0NzIyZi1lNGUyLTRiZDEtYjY4MS0zMWY0MjY3YTJmM2EiIHk9IjUyOCIgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoNTcpIiBmaWxsPSJibGFjayIgc3Ryb2tlPSJub25lIiB4bWw6c3BhY2U9InByZXNlcnZlIj5jb2ZmZWU8L3RleHQ+CiAgICAgICAgICAgIDxsaW5lIGRpYWdyYW06c2VtYW50aWNUYXJnZXRJZD0ibm9uZSIgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoNTgpIiBmaWxsPSJub25lIiB4MT0iNzIiIHgyPSI2NSIgeTE9IjUzMSIgeTI9IjUzNCIgc3Ryb2tlPSJibGFjayIvPgogICAgICAgICAgICA8bGluZSBkaWFncmFtOnNlbWFudGljVGFyZ2V0SWQ9Im5vbmUiIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDU4KSIgZmlsbD0ibm9uZSIgeDE9IjY1IiB4Mj0iNzIiIHkxPSI1MzQiIHkyPSI1MzciIHN0cm9rZT0iYmxhY2siLz4KICAgICAgICAgICAgPGxpbmUgZGlhZ3JhbTpzZW1hbnRpY1RhcmdldElkPSJiZDAwMWExZC0zMDc1LTQzYmYtODdkYi04ODE5NmJmZmNiNGMiIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDU0KSIgZmlsbD0ibm9uZSIgeDE9IjM0OSIgeDI9IjIyMiIgeTE9IjY0IiB5Mj0iNjQiIHN0cm9rZT0iYmxhY2siLz4KICAgICAgICAgICAgPHRleHQgeD0iMjQzIiBkaWFncmFtOnNlbWFudGljVGFyZ2V0SWQ9ImJkMDAxYTFkLTMwNzUtNDNiZi04N2RiLTg4MTk2YmZmY2I0YyIgeT0iNTgiIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDU5KSIgZmlsbD0iYmxhY2siIHN0cm9rZT0ibm9uZSIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+ZWxlY3RyaWNhbCBwb3dlcjwvdGV4dD4KICAgICAgICAgICAgPGxpbmUgZGlhZ3JhbTpzZW1hbnRpY1RhcmdldElkPSJub25lIiBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGg2MCkiIGZpbGw9Im5vbmUiIHgxPSIyMjkiIHgyPSIyMjIiIHkxPSI2MSIgeTI9IjY0IiBzdHJva2U9ImJsYWNrIi8+CiAgICAgICAgICAgIDxsaW5lIGRpYWdyYW06c2VtYW50aWNUYXJnZXRJZD0ibm9uZSIgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoNjApIiBmaWxsPSJub25lIiB4MT0iMjIyIiB4Mj0iMjI5IiB5MT0iNjQiIHkyPSI2NyIgc3Ryb2tlPSJibGFjayIvPgogICAgICAgICAgICA8bGluZSBkaWFncmFtOnNlbWFudGljVGFyZ2V0SWQ9IjIwOGQ2M2UwLTI0NzctNGI5YS04ZDY4LTQ5NDI1ODBkMDI0MSIgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoNTQpIiBmaWxsPSJub25lIiB4MT0iNjEiIHgyPSIyMTIiIHkxPSIyNDEiIHkyPSIyNDEiIHN0cm9rZT0iYmxhY2siLz4KICAgICAgICAgICAgPHRleHQgeD0iNTciIGRpYWdyYW06c2VtYW50aWNUYXJnZXRJZD0iMjA4ZDYzZTAtMjQ3Ny00YjlhLThkNjgtNDk0MjU4MGQwMjQxIiB5PSIyMzUiIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDYxKSIgZmlsbD0iYmxhY2siIHN0cm9rZT0ibm9uZSIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+Y29mZmVlIG11ZywgYmVhbnMgYW5kIHdhdGVyPC90ZXh0PgogICAgICAgICAgICA8bGluZSBkaWFncmFtOnNlbWFudGljVGFyZ2V0SWQ9Im5vbmUiIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDYyKSIgZmlsbD0ibm9uZSIgeDE9IjIwNSIgeDI9IjIxMiIgeTE9IjI0NCIgeTI9IjI0MSIgc3Ryb2tlPSJibGFjayIvPgogICAgICAgICAgICA8bGluZSBkaWFncmFtOnNlbWFudGljVGFyZ2V0SWQ9Im5vbmUiIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDYyKSIgZmlsbD0ibm9uZSIgeDE9IjIxMiIgeDI9IjIwNSIgeTE9IjI0MSIgeTI9IjIzOCIgc3Ryb2tlPSJibGFjayIvPgogICAgICAgICAgICA8bGluZSBkaWFncmFtOnNlbWFudGljVGFyZ2V0SWQ9ImU2MjYzMGY0LWE4MDQtNDQ4YS04ZWUwLWQ4NTYyMGFmZjc0MiIgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoNTQpIiBmaWxsPSJub25lIiB4MT0iMjEyIiB4Mj0iMTY3IiB5MT0iNjIzIiB5Mj0iNjIzIiBzdHJva2U9ImJsYWNrIi8+CiAgICAgICAgICAgIDxsaW5lIGRpYWdyYW06c2VtYW50aWNUYXJnZXRJZD0iZTYyNjMwZjQtYTgwNC00NDhhLThlZTAtZDg1NjIwYWZmNzQyIiBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGg1NCkiIGZpbGw9Im5vbmUiIHgxPSIxNTciIHgyPSI2NSIgeTE9IjYyMyIgeTI9IjYyMyIgc3Ryb2tlPSJibGFjayIvPgogICAgICAgICAgICA8dGV4dCB4PSIxMDAiIGRpYWdyYW06c2VtYW50aWNUYXJnZXRJZD0iZTYyNjMwZjQtYTgwNC00NDhhLThlZTAtZDg1NjIwYWZmNzQyIiB5PSI2MTciIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDYzKSIgZmlsbD0iYmxhY2siIHN0cm9rZT0ibm9uZSIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+cHJvY2VzcyB3YXN0ZTwvdGV4dD4KICAgICAgICAgICAgPGxpbmUgZGlhZ3JhbTpzZW1hbnRpY1RhcmdldElkPSJub25lIiBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGg2NCkiIGZpbGw9Im5vbmUiIHgxPSI3MiIgeDI9IjY1IiB5MT0iNjIwIiB5Mj0iNjIzIiBzdHJva2U9ImJsYWNrIi8+CiAgICAgICAgICAgIDxsaW5lIGRpYWdyYW06c2VtYW50aWNUYXJnZXRJZD0ibm9uZSIgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoNjQpIiBmaWxsPSJub25lIiB4MT0iNjUiIHgyPSI3MiIgeTE9IjYyMyIgeTI9IjYyNiIgc3Ryb2tlPSJibGFjayIvPgogICAgICAgICAgICA8bGluZSBkaWFncmFtOnNlbWFudGljVGFyZ2V0SWQ9IjU4NmZjMmViLWYxYzItNDAzOS04NWFiLTE3YmUxMDcxYjMwZiIgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoNTQpIiBmaWxsPSJub25lIiB4MT0iMjIyIiB4Mj0iMzQ1IiB5MT0iNTA3IiB5Mj0iNTA3IiBzdHJva2U9ImJsYWNrIi8+CiAgICAgICAgICAgIDx0ZXh0IHg9IjIzMSIgZGlhZ3JhbTpzZW1hbnRpY1RhcmdldElkPSI1ODZmYzJlYi1mMWMyLTQwMzktODVhYi0xN2JlMTA3MWIzMGYiIHk9IjUwMSIgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoNjUpIiBmaWxsPSJibGFjayIgc3Ryb2tlPSJub25lIiB4bWw6c3BhY2U9InByZXNlcnZlIj5ub2lzZSBhbmQgdmlicmF0aW9uPC90ZXh0PgogICAgICAgICAgICA8bGluZSBkaWFncmFtOnNlbWFudGljVGFyZ2V0SWQ9Im5vbmUiIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDY2KSIgZmlsbD0ibm9uZSIgeDE9IjMzOCIgeDI9IjM0NSIgeTE9IjUxMCIgeTI9IjUwNyIgc3Ryb2tlPSJibGFjayIvPgogICAgICAgICAgICA8bGluZSBkaWFncmFtOnNlbWFudGljVGFyZ2V0SWQ9Im5vbmUiIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDY2KSIgZmlsbD0ibm9uZSIgeDE9IjM0NSIgeDI9IjMzOCIgeTE9IjUwNyIgeTI9IjUwNCIgc3Ryb2tlPSJibGFjayIvPgogICAgICAgICAgICA8bGluZSBkaWFncmFtOnNlbWFudGljVGFyZ2V0SWQ9IjdlYzU4NjE2LTM0NjEtNDM4Zi1iZTZlLTA5MWFiNTc2M2QzMiIgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoNTQpIiBmaWxsPSJub25lIiB4MT0iMjEyIiB4Mj0iMTU0IiB5MT0iNDIyIiB5Mj0iNDIyIiBzdHJva2U9InJnYig2OSw2OSw2OSkiLz4KICAgICAgICAgICAgPGxpbmUgZGlhZ3JhbTpzZW1hbnRpY1RhcmdldElkPSI3ZWM1ODYxNi0zNDYxLTQzOGYtYmU2ZS0wOTFhYjU3NjNkMzIiIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDU0KSIgZmlsbD0ibm9uZSIgeDE9IjE1NCIgeDI9IjE2MiIgeTE9IjQyMiIgeTI9IjQyMiIgc3Ryb2tlPSJyZ2IoNjksNjksNjkpIi8+CiAgICAgICAgICAgIDxsaW5lIGRpYWdyYW06c2VtYW50aWNUYXJnZXRJZD0iN2VjNTg2MTYtMzQ2MS00MzhmLWJlNmUtMDkxYWI1NzYzZDMyIiBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGg1NCkiIGZpbGw9Im5vbmUiIHgxPSIxNjIiIHgyPSIxNjIiIHkxPSI0MjIiIHkyPSI2MzUiIHN0cm9rZT0icmdiKDY5LDY5LDY5KSIvPgogICAgICAgICAgICA8bGluZSBkaWFncmFtOnNlbWFudGljVGFyZ2V0SWQ9IjdlYzU4NjE2LTM0NjEtNDM4Zi1iZTZlLTA5MWFiNTc2M2QzMiIgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoNTQpIiBmaWxsPSJub25lIiB4MT0iMTYyIiB4Mj0iMTU0IiB5MT0iNjM1IiB5Mj0iNjM1IiBzdHJva2U9InJnYig2OSw2OSw2OSkiLz4KICAgICAgICAgICAgPGxpbmUgZGlhZ3JhbTpzZW1hbnRpY1RhcmdldElkPSI3ZWM1ODYxNi0zNDYxLTQzOGYtYmU2ZS0wOTFhYjU3NjNkMzIiIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDU0KSIgZmlsbD0ibm9uZSIgeDE9IjE1NCIgeDI9IjIxMiIgeTE9IjYzNSIgeTI9IjYzNSIgc3Ryb2tlPSJyZ2IoNjksNjksNjkpIi8+CiAgICAgICAgICAgIDx0ZXh0IHg9IjE1NiIgZGlhZ3JhbTpzZW1hbnRpY1RhcmdldElkPSI3ZWM1ODYxNi0zNDYxLTQzOGYtYmU2ZS0wOTFhYjU3NjNkMzIiIHk9IjUzMyIgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoNjcpIiBmaWxsPSJibGFjayIgc3Ryb2tlPSJub25lIiB4bWw6c3BhY2U9InByZXNlcnZlIj4mbHQ7IDUwczwvdGV4dD4KICAgICAgICAgICAgPGxpbmUgZGlhZ3JhbTpzZW1hbnRpY1RhcmdldElkPSJub25lIiBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGg2OCkiIGZpbGw9Im5vbmUiIHgxPSIxNjUiIHgyPSIxNjIiIHkxPSI0MjkiIHkyPSI0MjIiIHN0cm9rZT0icmdiKDY5LDY5LDY5KSIvPgogICAgICAgICAgICA8bGluZSBkaWFncmFtOnNlbWFudGljVGFyZ2V0SWQ9Im5vbmUiIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDY4KSIgZmlsbD0ibm9uZSIgeDE9IjE2MiIgeDI9IjE1OSIgeTE9IjQyMiIgeTI9IjQyOSIgc3Ryb2tlPSJyZ2IoNjksNjksNjkpIi8+CiAgICAgICAgICAgIDxsaW5lIGRpYWdyYW06c2VtYW50aWNUYXJnZXRJZD0ibm9uZSIgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoNjkpIiBmaWxsPSJub25lIiB4MT0iMTU5IiB4Mj0iMTYyIiB5MT0iNjI4IiB5Mj0iNjM1IiBzdHJva2U9InJnYig2OSw2OSw2OSkiLz4KICAgICAgICAgICAgPGxpbmUgZGlhZ3JhbTpzZW1hbnRpY1RhcmdldElkPSJub25lIiBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGg2OSkiIGZpbGw9Im5vbmUiIHgxPSIxNjIiIHgyPSIxNjUiIHkxPSI2MzUiIHkyPSI2MjgiIHN0cm9rZT0icmdiKDY5LDY5LDY5KSIvPgogICAgICAgICAgICA8bGluZSBkaWFncmFtOnNlbWFudGljVGFyZ2V0SWQ9IjFjZWZmZDIyLWY1NDAtNDAyOS1hOTAzLWM4MjA4ZGUyNzI3MCIgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoNTQpIiBmaWxsPSJub25lIiB4MT0iMjEyIiB4Mj0iMTU0IiB5MT0iNjQiIHkyPSI2NCIgc3Ryb2tlPSJyZ2IoNjksNjksNjkpIi8+CiAgICAgICAgICAgIDxsaW5lIGRpYWdyYW06c2VtYW50aWNUYXJnZXRJZD0iMWNlZmZkMjItZjU0MC00MDI5LWE5MDMtYzgyMDhkZTI3MjcwIiBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGg1NCkiIGZpbGw9Im5vbmUiIHgxPSIxNTQiIHgyPSIxNjIiIHkxPSI2NCIgeTI9IjY0IiBzdHJva2U9InJnYig2OSw2OSw2OSkiLz4KICAgICAgICAgICAgPGxpbmUgZGlhZ3JhbTpzZW1hbnRpY1RhcmdldElkPSIxY2VmZmQyMi1mNTQwLTQwMjktYTkwMy1jODIwOGRlMjcyNzAiIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDU0KSIgZmlsbD0ibm9uZSIgeDE9IjE2MiIgeDI9IjE2MiIgeTE9IjY0IiB5Mj0iNzgiIHN0cm9rZT0icmdiKDY5LDY5LDY5KSIvPgogICAgICAgICAgICA8bGluZSBkaWFncmFtOnNlbWFudGljVGFyZ2V0SWQ9IjFjZWZmZDIyLWY1NDAtNDAyOS1hOTAzLWM4MjA4ZGUyNzI3MCIgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoNTQpIiBmaWxsPSJub25lIiB4MT0iMTYyIiB4Mj0iMTU0IiB5MT0iNzgiIHkyPSI3OCIgc3Ryb2tlPSJyZ2IoNjksNjksNjkpIi8+CiAgICAgICAgICAgIDxsaW5lIGRpYWdyYW06c2VtYW50aWNUYXJnZXRJZD0iMWNlZmZkMjItZjU0MC00MDI5LWE5MDMtYzgyMDhkZTI3MjcwIiBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGg1NCkiIGZpbGw9Im5vbmUiIHgxPSIxNTQiIHgyPSIyMTIiIHkxPSI3OCIgeTI9Ijc4IiBzdHJva2U9InJnYig2OSw2OSw2OSkiLz4KICAgICAgICAgICAgPHRleHQgeD0iMTU2IiBkaWFncmFtOnNlbWFudGljVGFyZ2V0SWQ9IjFjZWZmZDIyLWY1NDAtNDAyOS1hOTAzLWM4MjA4ZGUyNzI3MCIgeT0iNzUiIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDcwKSIgZmlsbD0iYmxhY2siIHN0cm9rZT0ibm9uZSIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+Jmx0OyAxMHM8L3RleHQ+CiAgICAgICAgICAgIDxsaW5lIGRpYWdyYW06c2VtYW50aWNUYXJnZXRJZD0ibm9uZSIgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoNzEpIiBmaWxsPSJub25lIiB4MT0iMTU5IiB4Mj0iMTYyIiB5MT0iNTciIHkyPSI2NCIgc3Ryb2tlPSJyZ2IoNjksNjksNjkpIi8+CiAgICAgICAgICAgIDxsaW5lIGRpYWdyYW06c2VtYW50aWNUYXJnZXRJZD0ibm9uZSIgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoNzEpIiBmaWxsPSJub25lIiB4MT0iMTYyIiB4Mj0iMTY1IiB5MT0iNjQiIHkyPSI1NyIgc3Ryb2tlPSJyZ2IoNjksNjksNjkpIi8+CiAgICAgICAgICAgIDxsaW5lIGRpYWdyYW06c2VtYW50aWNUYXJnZXRJZD0ibm9uZSIgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoNzIpIiBmaWxsPSJub25lIiB4MT0iMTY1IiB4Mj0iMTYyIiB5MT0iODUiIHkyPSI3OCIgc3Ryb2tlPSJyZ2IoNjksNjksNjkpIi8+CiAgICAgICAgICAgIDxsaW5lIGRpYWdyYW06c2VtYW50aWNUYXJnZXRJZD0ibm9uZSIgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoNzIpIiBmaWxsPSJub25lIiB4MT0iMTYyIiB4Mj0iMTU5IiB5MT0iNzgiIHkyPSI4NSIgc3Ryb2tlPSJyZ2IoNjksNjksNjkpIi8+CiAgICAgICAgICAgIDxsaW5lIGRpYWdyYW06c2VtYW50aWNUYXJnZXRJZD0iNDNhMzIyNTktMzdjYS00MGRlLTg1YmYtMDQwNmJkZDNmYTIyIiBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGg1NCkiIGZpbGw9Im5vbmUiIHgxPSIyMTYiIHgyPSI2NSIgeTE9IjE4NyIgeTI9IjE4NyIgc3Ryb2tlPSJibGFjayIvPgogICAgICAgICAgICA8dGV4dCB4PSI3MCIgZGlhZ3JhbTpzZW1hbnRpY1RhcmdldElkPSI0M2EzMjI1OS0zN2NhLTQwZGUtODViZi0wNDA2YmRkM2ZhMjIiIHk9IjE4MSIgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoNzMpIiBmaWxsPSJibGFjayIgc3Ryb2tlPSJub25lIiB4bWw6c3BhY2U9InByZXNlcnZlIj5uZWVkIHN1cHBsaWVzIG5vdGlmaWNhdGlvbjwvdGV4dD4KICAgICAgICAgICAgPGxpbmUgZGlhZ3JhbTpzZW1hbnRpY1RhcmdldElkPSJub25lIiBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGg3NCkiIGZpbGw9Im5vbmUiIHgxPSI3MiIgeDI9IjY1IiB5MT0iMTg0IiB5Mj0iMTg3IiBzdHJva2U9ImJsYWNrIi8+CiAgICAgICAgICAgIDxsaW5lIGRpYWdyYW06c2VtYW50aWNUYXJnZXRJZD0ibm9uZSIgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoNzQpIiBmaWxsPSJub25lIiB4MT0iNjUiIHgyPSI3MiIgeTE9IjE4NyIgeTI9IjE5MCIgc3Ryb2tlPSJibGFjayIvPgogICAgICAgICAgICA8dGV4dCB4PSIxMSIgZGlhZ3JhbTpzZW1hbnRpY1RhcmdldElkPSJub25lIiB5PSI5OCIgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoNzUpIiBmaWxsPSJibGFjayIgc3Ryb2tlPSJub25lIiB4bWw6c3BhY2U9InByZXNlcnZlIj4gT1BUPC90ZXh0PgogICAgICAgICAgICA8dGV4dCB4PSIxMCIgZGlhZ3JhbTpzZW1hbnRpY1RhcmdldElkPSJub25lIiB5PSIxMjMiIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDc2KSIgZmlsbD0iYmxhY2siIHN0cm9rZT0ibm9uZSIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+WyBwb3dlci11cCBjaGVjayBjb25jbHVkZWQgdGhhdCBzdXBwbGllcyBsZXZlbCBpcyBpbnNzdWZmaWNpZW50IF08L3RleHQ+CiAgICAgICAgPC9nPgogICAgICAgIDxzeW1ib2wgaWQ9ImQzNjQxNWU4LTQyZGEtNDVkZS05NDdmLWU5NThhNWFkYjhkMCIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pZFlNaWQgbWVldCI+CiAgICAgICAgICAgIDxzdmcgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgY29udGVudFNjcmlwdFR5cGU9InRleHQvZWNtYXNjcmlwdCIgd2lkdGg9IjEwcHgiIHpvb21BbmRQYW49Im1hZ25pZnkiIGNvbnRlbnRTdHlsZVR5cGU9InRleHQvY3NzIiB2aWV3Qm94PSIwIDAgMjEuMzMzMzMyIDIxLjMzMzMzMiIgaGVpZ2h0PSIxMHB4IiBpZD0iX3N2ZzgyNF82MjlkNTdjMS04NzQ2LTRhZGMtYmVlZS01OGM3NmNmNDA3Y2EiIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaWRZTWlkIG1lZXQiIHZlcnNpb249IjEuMSI+CiAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgPGRlZnMgaWQ9Il9kZWZzODI4X2QzYjc0NzQzLTE2MGMtNDBhNi1hZTYwLTRjOTQzY2MxOTI5NiIvPgogICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIDxnIHN0eWxlPSJkaXNwbGF5OmlubGluZSIgaWQ9Il9sYXllcjJfODQ1ZGZkMGYtNWJjZC00ODc5LTk2ZjItZjZjZjk2ZjI5NjBhIj4KICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0ibSAtNi44NzY5MzI2LDAuMjgzMzI4NjIgaCAxLjg3ODMxMDQgViAyMS4wODEwMjggaCAtMS44NzgzMTA0IHoiIGlkPSJfcmVjdDk5MV9mMDE4NTgwZC1iNTYzLTQwNjQtYTljMS0yNWE2ZWQyNDA2MWEiIHN0eWxlPSJzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MC41NTAzMDkiIHRyYW5zZm9ybT0icm90YXRlKC05MCkiLz4KICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgPC9nPgogICAgICAgICAgICAgICAgCiAgICAgICAgICAgIDwvc3ZnPgogICAgICAgIDwvc3ltYm9sPgogICAgICAgIDxsaW5lYXJHcmFkaWVudCB4MT0iMTAiIHgyPSI0MDAiIHkxPSI4MyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHkyPSI4MyIgeGxpbms6dHlwZT0ic2ltcGxlIiB4bGluazphY3R1YXRlPSJvbkxvYWQiIGlkPSJsaW5lYXJHcmFkaWVudDEiIHhsaW5rOnNob3c9Im90aGVyIiBzcHJlYWRNZXRob2Q9InBhZCI+CiAgICAgICAgICAgIDxzdG9wIHN0b3Atb3BhY2l0eT0iMSIgc3RvcC1jb2xvcj0id2hpdGUiIG9mZnNldD0iMCUiLz4KICAgICAgICAgICAgPHN0b3Agc3RvcC1vcGFjaXR5PSIxIiBzdG9wLWNvbG9yPSJyZ2IoMjQyLDI0MiwyNDIpIiBvZmZzZXQ9IjEwMCUiLz4KICAgICAgICA8L2xpbmVhckdyYWRpZW50PgogICAgICAgIDxjbGlwUGF0aCBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgaWQ9ImNsaXBQYXRoMSIgZmlsbD0idHJhbnNwYXJlbnQiIHN0cm9rZT0idHJhbnNwYXJlbnQiPgogICAgICAgICAgICA8cGF0aCBkPSJNOSA4MiBMNDAxIDgyIEw0MDEgMzYxIEw5IDM2MSBMOSA4MiBaIi8+CiAgICAgICAgPC9jbGlwUGF0aD4KICAgICAgICA8Y2xpcFBhdGggY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiIGlkPSJjbGlwUGF0aDIiIGZpbGw9InRyYW5zcGFyZW50IiBzdHJva2U9InRyYW5zcGFyZW50Ij4KICAgICAgICAgICAgPHBhdGggZD0iTTE2NiA5IEwyNjggOSBMMjY4IDM5IEwxNjYgMzkgTDE2NiA5IFoiLz4KICAgICAgICA8L2NsaXBQYXRoPgogICAgICAgIDxjbGlwUGF0aCBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgaWQ9ImNsaXBQYXRoMyIgZmlsbD0idHJhbnNwYXJlbnQiIHN0cm9rZT0idHJhbnNwYXJlbnQiPgogICAgICAgICAgICA8cGF0aCBkPSJNMTY3IDEwIEwyNjggMTAgTDI2OCAzOSBMMTY3IDM5IEwxNjcgMTAgWiIvPgogICAgICAgIDwvY2xpcFBhdGg+CiAgICAgICAgPGNsaXBQYXRoIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIiBpZD0iY2xpcFBhdGg0IiBmaWxsPSJ0cmFuc3BhcmVudCIgc3Ryb2tlPSJ0cmFuc3BhcmVudCI+CiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNjcgMTAgTDI3MSAxMCBMMjcxIDM5IEwxNjcgMzkgTDE2NyAxMCBaIi8+CiAgICAgICAgPC9jbGlwUGF0aD4KICAgICAgICA8Y2xpcFBhdGggY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiIGlkPSJjbGlwUGF0aDUiIGZpbGw9InRyYW5zcGFyZW50IiBzdHJva2U9InRyYW5zcGFyZW50Ij4KICAgICAgICAgICAgPHBhdGggZD0iTTIxMSAzNyBMMjIzIDM3IEwyMjMgNzUwIEwyMTEgNzUwIEwyMTEgMzcgWiIvPgogICAgICAgIDwvY2xpcFBhdGg+CiAgICAgICAgPGNsaXBQYXRoIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIiBpZD0iY2xpcFBhdGg2IiBmaWxsPSJ0cmFuc3BhcmVudCIgc3Ryb2tlPSJ0cmFuc3BhcmVudCI+CiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMTEgNzQ4IEwyMjMgNzQ4IEwyMjMgNzYwIEwyMTEgNzYwIEwyMTEgNzQ4IFoiLz4KICAgICAgICA8L2NsaXBQYXRoPgogICAgICAgIDxjbGlwUGF0aCBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgaWQ9ImNsaXBQYXRoNyIgZmlsbD0idHJhbnNwYXJlbnQiIHN0cm9rZT0idHJhbnNwYXJlbnQiPgogICAgICAgICAgICA8cGF0aCBkPSJNMjExIDQyMSBMMjIzIDQyMSBMMjIzIDYzNiBMMjExIDYzNiBMMjExIDQyMSBaIi8+CiAgICAgICAgPC9jbGlwUGF0aD4KICAgICAgICA8Y2xpcFBhdGggY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiIGlkPSJjbGlwUGF0aDgiIGZpbGw9InRyYW5zcGFyZW50IiBzdHJva2U9InRyYW5zcGFyZW50Ij4KICAgICAgICAgICAgPHBhdGggZD0iTTE2NiA0NjEgTDI2OCA0NjEgTDI2OCA0ODUgTDE2NiA0ODUgTDE2NiA0NjEgWiIvPgogICAgICAgIDwvY2xpcFBhdGg+CiAgICAgICAgPGNsaXBQYXRoIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIiBpZD0iY2xpcFBhdGg5IiBmaWxsPSJ0cmFuc3BhcmVudCIgc3Ryb2tlPSJ0cmFuc3BhcmVudCI+CiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNjcgNDYyIEwyNzEgNDYyIEwyNzEgNDg1IEwxNjcgNDg1IEwxNjcgNDYyIFoiLz4KICAgICAgICA8L2NsaXBQYXRoPgogICAgICAgIDxjbGlwUGF0aCBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgaWQ9ImNsaXBQYXRoMTAiIGZpbGw9InRyYW5zcGFyZW50IiBzdHJva2U9InRyYW5zcGFyZW50Ij4KICAgICAgICAgICAgPHBhdGggZD0iTTE2NiA0MjYgTDI2OCA0MjYgTDI2OCA0NTggTDE2NiA0NTggTDE2NiA0MjYgWiIvPgogICAgICAgIDwvY2xpcFBhdGg+CiAgICAgICAgPGNsaXBQYXRoIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIiBpZD0iY2xpcFBhdGgxMSIgZmlsbD0idHJhbnNwYXJlbnQiIHN0cm9rZT0idHJhbnNwYXJlbnQiPgogICAgICAgICAgICA8cGF0aCBkPSJNMTY2IDQyNiBMMjcxIDQyNiBMMjcxIDQ1OCBMMTY2IDQ1OCBMMTY2IDQyNiBaIi8+CiAgICAgICAgPC9jbGlwUGF0aD4KICAgICAgICA8Y2xpcFBhdGggY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiIGlkPSJjbGlwUGF0aDEyIiBmaWxsPSJ0cmFuc3BhcmVudCIgc3Ryb2tlPSJ0cmFuc3BhcmVudCI+CiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMTEgNjMgTDIyMyA2MyBMMjIzIDc5IEwyMTEgNzkgTDIxMSA2MyBaIi8+CiAgICAgICAgPC9jbGlwUGF0aD4KICAgICAgICA8Y2xpcFBhdGggY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiIGlkPSJjbGlwUGF0aDEzIiBmaWxsPSJ0cmFuc3BhcmVudCIgc3Ryb2tlPSJ0cmFuc3BhcmVudCI+CiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMTEgMjQwIEwyMjMgMjQwIEwyMjMgMjk0IEwyMTEgMjk0IEwyMTEgMjQwIFoiLz4KICAgICAgICA8L2NsaXBQYXRoPgogICAgICAgIDxjbGlwUGF0aCBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgaWQ9ImNsaXBQYXRoMTQiIGZpbGw9InRyYW5zcGFyZW50IiBzdHJva2U9InRyYW5zcGFyZW50Ij4KICAgICAgICAgICAgPHBhdGggZD0iTTE2NiAyNDUgTDI2OCAyNDUgTDI2OCAyNjcgTDE2NiAyNjcgTDE2NiAyNDUgWiIvPgogICAgICAgIDwvY2xpcFBhdGg+CiAgICAgICAgPGNsaXBQYXRoIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIiBpZD0iY2xpcFBhdGgxNSIgZmlsbD0idHJhbnNwYXJlbnQiIHN0cm9rZT0idHJhbnNwYXJlbnQiPgogICAgICAgICAgICA8cGF0aCBkPSJNMTY3IDI0NiBMMjcwIDI0NiBMMjcwIDI2NyBMMTY3IDI2NyBMMTY3IDI0NiBaIi8+CiAgICAgICAgPC9jbGlwUGF0aD4KICAgICAgICA8Y2xpcFBhdGggY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiIGlkPSJjbGlwUGF0aDE2IiBmaWxsPSJ0cmFuc3BhcmVudCIgc3Ryb2tlPSJ0cmFuc3BhcmVudCI+CiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNjYgMTE3IEwyNjggMTE3IEwyNjggMTQ5IEwxNjYgMTQ5IEwxNjYgMTE3IFoiLz4KICAgICAgICA8L2NsaXBQYXRoPgogICAgICAgIDxjbGlwUGF0aCBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgaWQ9ImNsaXBQYXRoMTciIGZpbGw9InRyYW5zcGFyZW50IiBzdHJva2U9InRyYW5zcGFyZW50Ij4KICAgICAgICAgICAgPHBhdGggZD0iTTE2NiAxMTcgTDI3MCAxMTcgTDI3MCAxNDkgTDE2NiAxNDkgTDE2NiAxMTcgWiIvPgogICAgICAgIDwvY2xpcFBhdGg+CiAgICAgICAgPGNsaXBQYXRoIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIiBpZD0iY2xpcFBhdGgxOCIgZmlsbD0idHJhbnNwYXJlbnQiIHN0cm9rZT0idHJhbnNwYXJlbnQiPgogICAgICAgICAgICA8cGF0aCBkPSJNMTY2IDMwMiBMMjY4IDMwMiBMMjY4IDM1NiBMMTY2IDM1NiBMMTY2IDMwMiBaIi8+CiAgICAgICAgPC9jbGlwUGF0aD4KICAgICAgICA8Y2xpcFBhdGggY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiIGlkPSJjbGlwUGF0aDE5IiBmaWxsPSJ0cmFuc3BhcmVudCIgc3Ryb2tlPSJ0cmFuc3BhcmVudCI+CiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNjYgMzAyIEwyNzAgMzAyIEwyNzAgMzU2IEwxNjYgMzU2IEwxNjYgMzAyIFoiLz4KICAgICAgICA8L2NsaXBQYXRoPgogICAgICAgIDxjbGlwUGF0aCBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgaWQ9ImNsaXBQYXRoMjAiIGZpbGw9InRyYW5zcGFyZW50IiBzdHJva2U9InRyYW5zcGFyZW50Ij4KICAgICAgICAgICAgPHBhdGggZD0iTTE2NiA2NjMgTDI2OCA2NjMgTDI2OCA2OTUgTDE2NiA2OTUgTDE2NiA2NjMgWiIvPgogICAgICAgIDwvY2xpcFBhdGg+CiAgICAgICAgPGNsaXBQYXRoIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIiBpZD0iY2xpcFBhdGgyMSIgZmlsbD0idHJhbnNwYXJlbnQiIHN0cm9rZT0idHJhbnNwYXJlbnQiPgogICAgICAgICAgICA8cGF0aCBkPSJNMTY2IDY2MyBMMjcwIDY2MyBMMjcwIDY5NSBMMTY2IDY5NSBMMTY2IDY2MyBaIi8+CiAgICAgICAgPC9jbGlwUGF0aD4KICAgICAgICA8Y2xpcFBhdGggY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiIGlkPSJjbGlwUGF0aDIyIiBmaWxsPSJ0cmFuc3BhcmVudCIgc3Ryb2tlPSJ0cmFuc3BhcmVudCI+CiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNjYgMTUyIEwyNjggMTUyIEwyNjggMTg0IEwxNjYgMTg0IEwxNjYgMTUyIFoiLz4KICAgICAgICA8L2NsaXBQYXRoPgogICAgICAgIDxjbGlwUGF0aCBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgaWQ9ImNsaXBQYXRoMjMiIGZpbGw9InRyYW5zcGFyZW50IiBzdHJva2U9InRyYW5zcGFyZW50Ij4KICAgICAgICAgICAgPHBhdGggZD0iTTE2NyAxNTMgTDI3MCAxNTMgTDI3MCAxODQgTDE2NyAxODQgTDE2NyAxNTMgWiIvPgogICAgICAgIDwvY2xpcFBhdGg+CiAgICAgICAgPGNsaXBQYXRoIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIiBpZD0iY2xpcFBhdGgyNCIgZmlsbD0idHJhbnNwYXJlbnQiIHN0cm9rZT0idHJhbnNwYXJlbnQiPgogICAgICAgICAgICA8cGF0aCBkPSJNMjk5IDkgTDQwMSA5IEw0MDEgMzkgTDI5OSAzOSBMMjk5IDkgWiIvPgogICAgICAgIDwvY2xpcFBhdGg+CiAgICAgICAgPGNsaXBQYXRoIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIiBpZD0iY2xpcFBhdGgyNSIgZmlsbD0idHJhbnNwYXJlbnQiIHN0cm9rZT0idHJhbnNwYXJlbnQiPgogICAgICAgICAgICA8cGF0aCBkPSJNMzAwIDEwIEw0MDEgMTAgTDQwMSAzOSBMMzAwIDM5IEwzMDAgMTAgWiIvPgogICAgICAgIDwvY2xpcFBhdGg+CiAgICAgICAgPGNsaXBQYXRoIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIiBpZD0iY2xpcFBhdGgyNiIgZmlsbD0idHJhbnNwYXJlbnQiIHN0cm9rZT0idHJhbnNwYXJlbnQiPgogICAgICAgICAgICA8cGF0aCBkPSJNMzAwIDEwIEw0MDQgMTAgTDQwNCAzOSBMMzAwIDM5IEwzMDAgMTAgWiIvPgogICAgICAgIDwvY2xpcFBhdGg+CiAgICAgICAgPGNsaXBQYXRoIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIiBpZD0iY2xpcFBhdGgyNyIgZmlsbD0idHJhbnNwYXJlbnQiIHN0cm9rZT0idHJhbnNwYXJlbnQiPgogICAgICAgICAgICA8cGF0aCBkPSJNMzQ0IDM3IEwzNTYgMzcgTDM1NiA3NTAgTDM0NCA3NTAgTDM0NCAzNyBaIi8+CiAgICAgICAgPC9jbGlwUGF0aD4KICAgICAgICA8Y2xpcFBhdGggY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiIGlkPSJjbGlwUGF0aDI4IiBmaWxsPSJ0cmFuc3BhcmVudCIgc3Ryb2tlPSJ0cmFuc3BhcmVudCI+CiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zNDQgNzQ4IEwzNTYgNzQ4IEwzNTYgNzYwIEwzNDQgNzYwIEwzNDQgNzQ4IFoiLz4KICAgICAgICA8L2NsaXBQYXRoPgogICAgICAgIDxjbGlwUGF0aCBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgaWQ9ImNsaXBQYXRoMjkiIGZpbGw9InRyYW5zcGFyZW50IiBzdHJva2U9InRyYW5zcGFyZW50Ij4KICAgICAgICAgICAgPHBhdGggZD0iTTM0NCA1MDYgTDM1NiA1MDYgTDM1NiA2MTkgTDM0NCA2MTkgTDM0NCA1MDYgWiIvPgogICAgICAgIDwvY2xpcFBhdGg+CiAgICAgICAgPGNsaXBQYXRoIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIiBpZD0iY2xpcFBhdGgzMCIgZmlsbD0idHJhbnNwYXJlbnQiIHN0cm9rZT0idHJhbnNwYXJlbnQiPgogICAgICAgICAgICA8cGF0aCBkPSJNMjk5IDUzOCBMNDAxIDUzOCBMNDAxIDU5NCBMMjk5IDU5NCBMMjk5IDUzOCBaIi8+CiAgICAgICAgPC9jbGlwUGF0aD4KICAgICAgICA8Y2xpcFBhdGggY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiIGlkPSJjbGlwUGF0aDMxIiBmaWxsPSJ0cmFuc3BhcmVudCIgc3Ryb2tlPSJ0cmFuc3BhcmVudCI+CiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMDAgNTM5IEw0MDMgNTM5IEw0MDMgNTk0IEwzMDAgNTk0IEwzMDAgNTM5IFoiLz4KICAgICAgICA8L2NsaXBQYXRoPgogICAgICAgIDxjbGlwUGF0aCBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgaWQ9ImNsaXBQYXRoMzIiIGZpbGw9InRyYW5zcGFyZW50IiBzdHJva2U9InRyYW5zcGFyZW50Ij4KICAgICAgICAgICAgPHBhdGggZD0iTTkgOSBMMTExIDkgTDExMSAzOSBMOSAzOSBMOSA5IFoiLz4KICAgICAgICA8L2NsaXBQYXRoPgogICAgICAgIDxjbGlwUGF0aCBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgaWQ9ImNsaXBQYXRoMzMiIGZpbGw9InRyYW5zcGFyZW50IiBzdHJva2U9InRyYW5zcGFyZW50Ij4KICAgICAgICAgICAgPHBhdGggZD0iTTEwIDEwIEwxMTEgMTAgTDExMSAzOSBMMTAgMzkgTDEwIDEwIFoiLz4KICAgICAgICA8L2NsaXBQYXRoPgogICAgICAgIDxjbGlwUGF0aCBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgaWQ9ImNsaXBQYXRoMzQiIGZpbGw9InRyYW5zcGFyZW50IiBzdHJva2U9InRyYW5zcGFyZW50Ij4KICAgICAgICAgICAgPHBhdGggZD0iTTEwIDEwIEwxMTQgMTAgTDExNCAzOSBMMTAgMzkgTDEwIDEwIFoiLz4KICAgICAgICA8L2NsaXBQYXRoPgogICAgICAgIDxjbGlwUGF0aCBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgaWQ9ImNsaXBQYXRoMzUiIGZpbGw9InRyYW5zcGFyZW50IiBzdHJva2U9InRyYW5zcGFyZW50Ij4KICAgICAgICAgICAgPHBhdGggZD0iTTU0IDM3IEw2NiAzNyBMNjYgNzUwIEw1NCA3NTAgTDU0IDM3IFoiLz4KICAgICAgICA8L2NsaXBQYXRoPgogICAgICAgIDxjbGlwUGF0aCBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgaWQ9ImNsaXBQYXRoMzYiIGZpbGw9InRyYW5zcGFyZW50IiBzdHJva2U9InRyYW5zcGFyZW50Ij4KICAgICAgICAgICAgPHBhdGggZD0iTTU0IDc0OCBMNjYgNzQ4IEw2NiA3NjAgTDU0IDc2MCBMNTQgNzQ4IFoiLz4KICAgICAgICA8L2NsaXBQYXRoPgogICAgICAgIDxjbGlwUGF0aCBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgaWQ9ImNsaXBQYXRoMzciIGZpbGw9InRyYW5zcGFyZW50IiBzdHJva2U9InRyYW5zcGFyZW50Ij4KICAgICAgICAgICAgPHBhdGggZD0iTTU0IDUzMyBMNjYgNTMzIEw2NiA2MDkgTDU0IDYwOSBMNTQgNTMzIFoiLz4KICAgICAgICA8L2NsaXBQYXRoPgogICAgICAgIDxjbGlwUGF0aCBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgaWQ9ImNsaXBQYXRoMzgiIGZpbGw9InRyYW5zcGFyZW50IiBzdHJva2U9InRyYW5zcGFyZW50Ij4KICAgICAgICAgICAgPHBhdGggZD0iTTkgNTU2IEwxMTEgNTU2IEwxMTEgNTc5IEw5IDU3OSBMOSA1NTYgWiIvPgogICAgICAgIDwvY2xpcFBhdGg+CiAgICAgICAgPGNsaXBQYXRoIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIiBpZD0iY2xpcFBhdGgzOSIgZmlsbD0idHJhbnNwYXJlbnQiIHN0cm9rZT0idHJhbnNwYXJlbnQiPgogICAgICAgICAgICA8cGF0aCBkPSJNMTAgNTU3IEwxMTQgNTU3IEwxMTQgNTc5IEwxMCA1NzkgTDEwIDU1NyBaIi8+CiAgICAgICAgPC9jbGlwUGF0aD4KICAgICAgICA8Y2xpcFBhdGggY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiIGlkPSJjbGlwUGF0aDQwIiBmaWxsPSJ0cmFuc3BhcmVudCIgc3Ryb2tlPSJ0cmFuc3BhcmVudCI+CiAgICAgICAgICAgIDxwYXRoIGQ9Ik01NSA2MjIgTDY2IDYyMiBMNjYgNzAwIEw1NSA3MDAgTDU1IDYyMiBaIi8+CiAgICAgICAgPC9jbGlwUGF0aD4KICAgICAgICA8Y2xpcFBhdGggY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiIGlkPSJjbGlwUGF0aDQxIiBmaWxsPSJ0cmFuc3BhcmVudCIgc3Ryb2tlPSJ0cmFuc3BhcmVudCI+CiAgICAgICAgICAgIDxwYXRoIGQ9Ik05IDYyNyBMMTExIDYyNyBMMTExIDY3MCBMOSA2NzAgTDkgNjI3IFoiLz4KICAgICAgICA8L2NsaXBQYXRoPgogICAgICAgIDxjbGlwUGF0aCBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgaWQ9ImNsaXBQYXRoNDIiIGZpbGw9InRyYW5zcGFyZW50IiBzdHJva2U9InRyYW5zcGFyZW50Ij4KICAgICAgICAgICAgPHBhdGggZD0iTTEwIDYyOCBMMTEzIDYyOCBMMTEzIDY3MCBMMTAgNjcwIEwxMCA2MjggWiIvPgogICAgICAgIDwvY2xpcFBhdGg+CiAgICAgICAgPGNsaXBQYXRoIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIiBpZD0iY2xpcFBhdGg0MyIgZmlsbD0idHJhbnNwYXJlbnQiIHN0cm9rZT0idHJhbnNwYXJlbnQiPgogICAgICAgICAgICA8cGF0aCBkPSJNMTAgNjI4IEwxMTQgNjI4IEwxMTQgNjcwIEwxMCA2NzAgTDEwIDYyOCBaIi8+CiAgICAgICAgPC9jbGlwUGF0aD4KICAgICAgICA8Y2xpcFBhdGggY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiIGlkPSJjbGlwUGF0aDQ0IiBmaWxsPSJ0cmFuc3BhcmVudCIgc3Ryb2tlPSJ0cmFuc3BhcmVudCI+CiAgICAgICAgICAgIDxwYXRoIGQ9Ik05IDM2NCBMMTExIDM2NCBMMTExIDQxOCBMOSA0MTggTDkgMzY0IFoiLz4KICAgICAgICA8L2NsaXBQYXRoPgogICAgICAgIDxjbGlwUGF0aCBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgaWQ9ImNsaXBQYXRoNDUiIGZpbGw9InRyYW5zcGFyZW50IiBzdHJva2U9InRyYW5zcGFyZW50Ij4KICAgICAgICAgICAgPHBhdGggZD0iTTEwIDM2NSBMMTEzIDM2NSBMMTEzIDQxOCBMMTAgNDE4IEwxMCAzNjUgWiIvPgogICAgICAgIDwvY2xpcFBhdGg+CiAgICAgICAgPGNsaXBQYXRoIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIiBpZD0iY2xpcFBhdGg0NiIgZmlsbD0idHJhbnNwYXJlbnQiIHN0cm9rZT0idHJhbnNwYXJlbnQiPgogICAgICAgICAgICA8cGF0aCBkPSJNNTQgMTg3IEw2NiAxODcgTDY2IDIyOSBMNTQgMjI5IEw1NCAxODcgWiIvPgogICAgICAgIDwvY2xpcFBhdGg+CiAgICAgICAgPGNsaXBQYXRoIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIiBpZD0iY2xpcFBhdGg0NyIgZmlsbD0idHJhbnNwYXJlbnQiIHN0cm9rZT0idHJhbnNwYXJlbnQiPgogICAgICAgICAgICA8cGF0aCBkPSJNOSAxOTIgTDExMSAxOTIgTDExMSAyMjQgTDkgMjI0IEw5IDE5MiBaIi8+CiAgICAgICAgPC9jbGlwUGF0aD4KICAgICAgICA8Y2xpcFBhdGggY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiIGlkPSJjbGlwUGF0aDQ4IiBmaWxsPSJ0cmFuc3BhcmVudCIgc3Ryb2tlPSJ0cmFuc3BhcmVudCI+CiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMCAxOTMgTDExMyAxOTMgTDExMyAyMjQgTDEwIDIyNCBMMTAgMTkzIFoiLz4KICAgICAgICA8L2NsaXBQYXRoPgogICAgICAgIDxjbGlwUGF0aCBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgaWQ9ImNsaXBQYXRoNDkiIGZpbGw9InRyYW5zcGFyZW50IiBzdHJva2U9InRyYW5zcGFyZW50Ij4KICAgICAgICAgICAgPHBhdGggZD0iTTEwIDE5MyBMMTE0IDE5MyBMMTE0IDIyNCBMMTAgMjI0IEwxMCAxOTMgWiIvPgogICAgICAgIDwvY2xpcFBhdGg+CiAgICAgICAgPGNsaXBQYXRoIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIiBpZD0iY2xpcFBhdGg1MCIgZmlsbD0idHJhbnNwYXJlbnQiIHN0cm9rZT0idHJhbnNwYXJlbnQiPgogICAgICAgICAgICA8cGF0aCBkPSJNMjExIDcyIEwyMjMgNzIgTDIyMyA4NCBMMjExIDg0IEwyMTEgNzIgWiIvPgogICAgICAgIDwvY2xpcFBhdGg+CiAgICAgICAgPGNsaXBQYXRoIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIiBpZD0iY2xpcFBhdGg1MSIgZmlsbD0idHJhbnNwYXJlbnQiIHN0cm9rZT0idHJhbnNwYXJlbnQiPgogICAgICAgICAgICA8cGF0aCBkPSJNMjExIDU4IEwyMjMgNTggTDIyMyA3MCBMMjExIDcwIEwyMTEgNTggWiIvPgogICAgICAgIDwvY2xpcFBhdGg+CiAgICAgICAgPGNsaXBQYXRoIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIiBpZD0iY2xpcFBhdGg1MiIgZmlsbD0idHJhbnNwYXJlbnQiIHN0cm9rZT0idHJhbnNwYXJlbnQiPgogICAgICAgICAgICA8cGF0aCBkPSJNMjExIDYyOSBMMjIzIDYyOSBMMjIzIDY0MSBMMjExIDY0MSBMMjExIDYyOSBaIi8+CiAgICAgICAgPC9jbGlwUGF0aD4KICAgICAgICA8Y2xpcFBhdGggY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiIGlkPSJjbGlwUGF0aDUzIiBmaWxsPSJ0cmFuc3BhcmVudCIgc3Ryb2tlPSJ0cmFuc3BhcmVudCI+CiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMTEgNDE2IEwyMjMgNDE2IEwyMjMgNDI4IEwyMTEgNDI4IEwyMTEgNDE2IFoiLz4KICAgICAgICA8L2NsaXBQYXRoPgogICAgICAgIDxjbGlwUGF0aCBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgaWQ9ImNsaXBQYXRoNTQiIGZpbGw9InRyYW5zcGFyZW50IiBzdHJva2U9InRyYW5zcGFyZW50Ij4KICAgICAgICAgICAgPHBhdGggZD0iTS0xIC0xIEw0MTEgLTEgTDQxMSA3NzAgTC0xIDc3MCBMLTEgLTEgWiIvPgogICAgICAgIDwvY2xpcFBhdGg+CiAgICAgICAgPGNsaXBQYXRoIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIiBpZD0iY2xpcFBhdGg1NSIgZmlsbD0idHJhbnNwYXJlbnQiIHN0cm9rZT0idHJhbnNwYXJlbnQiPgogICAgICAgICAgICA8cGF0aCBkPSJNOTYgNDA1IEwxNzkgNDA1IEwxNzkgNDIwIEw5NiA0MjAgTDk2IDQwNSBaIi8+CiAgICAgICAgPC9jbGlwUGF0aD4KICAgICAgICA8Y2xpcFBhdGggY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiIGlkPSJjbGlwUGF0aDU2IiBmaWxsPSJ0cmFuc3BhcmVudCIgc3Ryb2tlPSJ0cmFuc3BhcmVudCI+CiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMDQgNDE4IEwyMTQgNDE4IEwyMTQgNDI3IEwyMDQgNDI3IEwyMDQgNDE4IFoiLz4KICAgICAgICA8L2NsaXBQYXRoPgogICAgICAgIDxjbGlwUGF0aCBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgaWQ9ImNsaXBQYXRoNTciIGZpbGw9InRyYW5zcGFyZW50IiBzdHJva2U9InRyYW5zcGFyZW50Ij4KICAgICAgICAgICAgPHBhdGggZD0iTTEyMSA1MTcgTDE1OSA1MTcgTDE1OSA1MzIgTDEyMSA1MzIgTDEyMSA1MTcgWiIvPgogICAgICAgIDwvY2xpcFBhdGg+CiAgICAgICAgPGNsaXBQYXRoIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIiBpZD0iY2xpcFBhdGg1OCIgZmlsbD0idHJhbnNwYXJlbnQiIHN0cm9rZT0idHJhbnNwYXJlbnQiPgogICAgICAgICAgICA8cGF0aCBkPSJNNjQgNTMwIEw3NCA1MzAgTDc0IDUzOSBMNjQgNTM5IEw2NCA1MzAgWiIvPgogICAgICAgIDwvY2xpcFBhdGg+CiAgICAgICAgPGNsaXBQYXRoIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIiBpZD0iY2xpcFBhdGg1OSIgZmlsbD0idHJhbnNwYXJlbnQiIHN0cm9rZT0idHJhbnNwYXJlbnQiPgogICAgICAgICAgICA8cGF0aCBkPSJNMjQyIDQ3IEwzMzMgNDcgTDMzMyA2MiBMMjQyIDYyIEwyNDIgNDcgWiIvPgogICAgICAgIDwvY2xpcFBhdGg+CiAgICAgICAgPGNsaXBQYXRoIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIiBpZD0iY2xpcFBhdGg2MCIgZmlsbD0idHJhbnNwYXJlbnQiIHN0cm9rZT0idHJhbnNwYXJlbnQiPgogICAgICAgICAgICA8cGF0aCBkPSJNMjIxIDYwIEwyMzEgNjAgTDIzMSA2OSBMMjIxIDY5IEwyMjEgNjAgWiIvPgogICAgICAgIDwvY2xpcFBhdGg+CiAgICAgICAgPGNsaXBQYXRoIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIiBpZD0iY2xpcFBhdGg2MSIgZmlsbD0idHJhbnNwYXJlbnQiIHN0cm9rZT0idHJhbnNwYXJlbnQiPgogICAgICAgICAgICA8cGF0aCBkPSJNNTYgMjI0IEwyMTkgMjI0IEwyMTkgMjM5IEw1NiAyMzkgTDU2IDIyNCBaIi8+CiAgICAgICAgPC9jbGlwUGF0aD4KICAgICAgICA8Y2xpcFBhdGggY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiIGlkPSJjbGlwUGF0aDYyIiBmaWxsPSJ0cmFuc3BhcmVudCIgc3Ryb2tlPSJ0cmFuc3BhcmVudCI+CiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMDQgMjM3IEwyMTQgMjM3IEwyMTQgMjQ2IEwyMDQgMjQ2IEwyMDQgMjM3IFoiLz4KICAgICAgICA8L2NsaXBQYXRoPgogICAgICAgIDxjbGlwUGF0aCBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgaWQ9ImNsaXBQYXRoNjMiIGZpbGw9InRyYW5zcGFyZW50IiBzdHJva2U9InRyYW5zcGFyZW50Ij4KICAgICAgICAgICAgPHBhdGggZD0iTTk5IDYwNiBMMTgzIDYwNiBMMTgzIDYyMSBMOTkgNjIxIEw5OSA2MDYgWiIvPgogICAgICAgIDwvY2xpcFBhdGg+CiAgICAgICAgPGNsaXBQYXRoIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIiBpZD0iY2xpcFBhdGg2NCIgZmlsbD0idHJhbnNwYXJlbnQiIHN0cm9rZT0idHJhbnNwYXJlbnQiPgogICAgICAgICAgICA8cGF0aCBkPSJNNjQgNjE5IEw3NCA2MTkgTDc0IDYyOCBMNjQgNjI4IEw2NCA2MTkgWiIvPgogICAgICAgIDwvY2xpcFBhdGg+CiAgICAgICAgPGNsaXBQYXRoIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIiBpZD0iY2xpcFBhdGg2NSIgZmlsbD0idHJhbnNwYXJlbnQiIHN0cm9rZT0idHJhbnNwYXJlbnQiPgogICAgICAgICAgICA8cGF0aCBkPSJNMjMwIDQ5MCBMMzM5IDQ5MCBMMzM5IDUwNSBMMjMwIDUwNSBMMjMwIDQ5MCBaIi8+CiAgICAgICAgPC9jbGlwUGF0aD4KICAgICAgICA8Y2xpcFBhdGggY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiIGlkPSJjbGlwUGF0aDY2IiBmaWxsPSJ0cmFuc3BhcmVudCIgc3Ryb2tlPSJ0cmFuc3BhcmVudCI+CiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMzcgNTAzIEwzNDcgNTAzIEwzNDcgNTEyIEwzMzcgNTEyIEwzMzcgNTAzIFoiLz4KICAgICAgICA8L2NsaXBQYXRoPgogICAgICAgIDxjbGlwUGF0aCBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgaWQ9ImNsaXBQYXRoNjciIGZpbGw9InRyYW5zcGFyZW50IiBzdHJva2U9InRyYW5zcGFyZW50Ij4KICAgICAgICAgICAgPHBhdGggZD0iTTE1NSA1MjIgTDE5MiA1MjIgTDE5MiA1MzcgTDE1NSA1MzcgTDE1NSA1MjIgWiIvPgogICAgICAgIDwvY2xpcFBhdGg+CiAgICAgICAgPGNsaXBQYXRoIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIiBpZD0iY2xpcFBhdGg2OCIgZmlsbD0idHJhbnNwYXJlbnQiIHN0cm9rZT0idHJhbnNwYXJlbnQiPgogICAgICAgICAgICA8cGF0aCBkPSJNMTU4IDQyMSBMMTY3IDQyMSBMMTY3IDQzMSBMMTU4IDQzMSBMMTU4IDQyMSBaIi8+CiAgICAgICAgPC9jbGlwUGF0aD4KICAgICAgICA8Y2xpcFBhdGggY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiIGlkPSJjbGlwUGF0aDY5IiBmaWxsPSJ0cmFuc3BhcmVudCIgc3Ryb2tlPSJ0cmFuc3BhcmVudCI+CiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNTggNjI3IEwxNjcgNjI3IEwxNjcgNjM3IEwxNTggNjM3IEwxNTggNjI3IFoiLz4KICAgICAgICA8L2NsaXBQYXRoPgogICAgICAgIDxjbGlwUGF0aCBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgaWQ9ImNsaXBQYXRoNzAiIGZpbGw9InRyYW5zcGFyZW50IiBzdHJva2U9InRyYW5zcGFyZW50Ij4KICAgICAgICAgICAgPHBhdGggZD0iTTE1NSA2NCBMMTkyIDY0IEwxOTIgNzkgTDE1NSA3OSBMMTU1IDY0IFoiLz4KICAgICAgICA8L2NsaXBQYXRoPgogICAgICAgIDxjbGlwUGF0aCBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgaWQ9ImNsaXBQYXRoNzEiIGZpbGw9InRyYW5zcGFyZW50IiBzdHJva2U9InRyYW5zcGFyZW50Ij4KICAgICAgICAgICAgPHBhdGggZD0iTTE1OCA1NiBMMTY3IDU2IEwxNjcgNjYgTDE1OCA2NiBMMTU4IDU2IFoiLz4KICAgICAgICA8L2NsaXBQYXRoPgogICAgICAgIDxjbGlwUGF0aCBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgaWQ9ImNsaXBQYXRoNzIiIGZpbGw9InRyYW5zcGFyZW50IiBzdHJva2U9InRyYW5zcGFyZW50Ij4KICAgICAgICAgICAgPHBhdGggZD0iTTE1OCA3NyBMMTY3IDc3IEwxNjcgODcgTDE1OCA4NyBMMTU4IDc3IFoiLz4KICAgICAgICA8L2NsaXBQYXRoPgogICAgICAgIDxjbGlwUGF0aCBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgaWQ9ImNsaXBQYXRoNzMiIGZpbGw9InRyYW5zcGFyZW50IiBzdHJva2U9InRyYW5zcGFyZW50Ij4KICAgICAgICAgICAgPHBhdGggZD0iTTY5IDE3MCBMMjE1IDE3MCBMMjE1IDE4NSBMNjkgMTg1IEw2OSAxNzAgWiIvPgogICAgICAgIDwvY2xpcFBhdGg+CiAgICAgICAgPGNsaXBQYXRoIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIiBpZD0iY2xpcFBhdGg3NCIgZmlsbD0idHJhbnNwYXJlbnQiIHN0cm9rZT0idHJhbnNwYXJlbnQiPgogICAgICAgICAgICA8cGF0aCBkPSJNNjQgMTgzIEw3NCAxODMgTDc0IDE5MiBMNjQgMTkyIEw2NCAxODMgWiIvPgogICAgICAgIDwvY2xpcFBhdGg+CiAgICAgICAgPGNsaXBQYXRoIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIiBpZD0iY2xpcFBhdGg3NSIgZmlsbD0idHJhbnNwYXJlbnQiIHN0cm9rZT0idHJhbnNwYXJlbnQiPgogICAgICAgICAgICA8cGF0aCBkPSJNLTEgLTEgTDQwNCAtMSBMNDA0IDc2MCBMLTEgNzYwIEwtMSAtMSBaIi8+CiAgICAgICAgPC9jbGlwUGF0aD4KICAgICAgICA8Y2xpcFBhdGggY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiIGlkPSJjbGlwUGF0aDc2IiBmaWxsPSJ0cmFuc3BhcmVudCIgc3Ryb2tlPSJ0cmFuc3BhcmVudCI+CiAgICAgICAgICAgIDxwYXRoIGQ9Ik0tMSAtMSBMNDAzIC0xIEw0MDMgNzYwIEwtMSA3NjAgTC0xIC0xIFoiLz4KICAgICAgICA8L2NsaXBQYXRoPgogICAgICAgIDxzeW1ib2wgaWQ9IjRkMGRmY2RlLTgxZjAtNGI5YS1hZDhiLWIxOTUzMGI5NGMyNCIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pZFlNaWQgbWVldCI+CiAgICAgICAgICAgIDxzdmcgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIiB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiIGNvbnRlbnRTY3JpcHRUeXBlPSJ0ZXh0L2VjbWFzY3JpcHQiIHpvb21BbmRQYW49Im1hZ25pZnkiIGNvbnRlbnRTdHlsZVR5cGU9InRleHQvY3NzIiBpZD0iX3N2ZzJfZjhmYmJmNzItOWE5Yi00M2NlLWJkNTUtMTFiNTFhOTJmZmM5IiB2ZXJzaW9uPSIxLjEiIHdpZHRoPSIxMHB4IiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJub25lIiB2aWV3Qm94PSIwIDAgNiA2IiBoZWlnaHQ9IjEwcHgiPgogICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIDxtZXRhZGF0YSBpZD0iX21ldGFkYXRhMTJfYjUyZGI2ZjUtNzYwMy00MWIxLWJmNTYtN2QzYmQwODMwZjEyIj4KICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgPHJkZjpSREY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICA8Y2M6V29yayByZGY6YWJvdXQ9IiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRjOnR5cGUgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIDwvY2M6V29yaz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIDwvcmRmOlJERj4KICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgPC9tZXRhZGF0YT4KICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICA8ZGVmcyBpZD0iX2RlZnMxMF80YzA4MGY3OC0xZjQ3LTRlODItYWM5My0zMTU2NDRhYWM5ZGYiLz4KICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICA8ZWxsaXBzZSB0cmFuc2Zvcm09Im1hdHJpeCgwLjk5ODQxNjU1LC0wLjA1NjI1Mjk2LDAuMDYyMDk0NzksMC45OTgwNzAyNiwwLDApIiBzdHlsZT0iZmlsbDojOTk5OTk5IiByeD0iMi4wOTcwNjMxIiBjeD0iMi44NTcxMzM2IiBpZD0iX3BhdGg0MTQ4Xzg0ZWI3NWYwLWE1NjctNGMxZC1hZmU1LTRhZmZkNTE0YTBjYiIgcnk9IjIuMDIxNTk3NiIgY3k9IjMuMTAzMTUxMyIvPgogICAgICAgICAgICAgICAgCiAgICAgICAgICAgIDwvc3ZnPgogICAgICAgIDwvc3ltYm9sPgogICAgPC9nPgo8L3N2Zz4K'; diff --git a/frontend/src/storybook/model-badge.ts b/frontend/src/storybook/model-badge.ts index e4b6ebf022..b9a663e3b5 100644 --- a/frontend/src/storybook/model-badge.ts +++ b/frontend/src/storybook/model-badge.ts @@ -3,5 +3,5 @@ * SPDX-License-Identifier: Apache-2.0 */ -export const base64ModelBadge: string = +export const base64ModelBadge = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI1MzYuMCIgaGVpZ2h0PSIxMjAuMCIgdmlld0JveD0iMCAwIDEzNCAzMCI+PGcgZm9udC1mYW1pbHk9InNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iMy4yIj4KPHJlY3QgZmlsbD0iI0ZGRiIgc3Ryb2tlPSIjMzMzIiBzdHJva2Utd2lkdGg9IjAuMiIgeD0iMSIgeT0iMCIgd2lkdGg9IjEzMiIgaGVpZ2h0PSIzMCIgLz4KPHJlY3QgZmlsbD0iI0ZGRiIgc3Ryb2tlPSIjMzMzIiBzdHJva2Utd2lkdGg9IjAuMiIgeD0iMjMuOCIgeT0iMS40IiB3aWR0aD0iMTA4IiBoZWlnaHQ9IjIyIiAvPgo8ZyBzdHJva2U9IiM1NTUiIHN0cm9rZS13aWR0aD0iLjMiPjxwYXRoIGZpbGw9IiNmZmRkODciIGQ9Ik0zIDUuNSBoMS45IFY3LjQgaC0yIHoiLz48cGF0aCBmaWxsPSIjYTVjMmU2IiBkPSJNMy44IDYuNCBoMiB2MS44IGgtMiB6Ii8+PC9nPjx0ZXh0IHg9IjciIHk9IjYuNCI+MTI3MzwvdGV4dD4KPHRleHQgeD0iNyIgeT0iOS40Ij5vYmplY3RzPC90ZXh0Pgo8ZyBmb250LXNpemU9IjMuMiI+CjxyZWN0IGZpbGw9IiNmZmRkODciIHN0cm9rZT0iIzMzMyIgc3Ryb2tlLXdpZHRoPSIwIiB4PSIyNC4yIiB5PSIzLjQiIHdpZHRoPSIxMi45ODk3ODc5MDI1OTIzMDEiIGhlaWdodD0iOCIgLz4KPHRleHQgeD0iMjUuMiIgeT0iOC40Ij4xMiU8L3RleHQ+CjxyZWN0IGZpbGw9IiM5MWNjODQiIHN0cm9rZT0iIzMzMyIgc3Ryb2tlLXdpZHRoPSIwIiB4PSIzNy4xODk3ODc5MDI1OTIzIiB5PSIzLjQiIHdpZHRoPSIzNi41MTg0NjAzMjk5MjkzMDQiIGhlaWdodD0iOCIgLz4KPHRleHQgeD0iMzguMTg5Nzg3OTAyNTkyMyIgeT0iOC40Ij4zNSU8L3RleHQ+CjxyZWN0IGZpbGw9IiNhNWMyZTYiIHN0cm9rZT0iIzMzMyIgc3Ryb2tlLXdpZHRoPSIwIiB4PSI3My43MDgyNDgyMzI1MjE2MSIgeT0iMy40IiB3aWR0aD0iNDEuMTc1MTc2NzQ3ODM5NzUiIGhlaWdodD0iOCIgLz4KPHRleHQgeD0iNzQuNzA4MjQ4MjMyNTIxNjEiIHk9IjguNCI+NDAlPC90ZXh0Pgo8cmVjdCBmaWxsPSIjZjg5ZjlmIiBzdHJva2U9IiMzMzMiIHN0cm9rZS13aWR0aD0iMCIgeD0iMTE0Ljg4MzQyNDk4MDM2MTM3IiB5PSIzLjQiIHdpZHRoPSIxMy4zMTY1NzUwMTk2Mzg2NDgiIGhlaWdodD0iOCIgLz4KPHRleHQgeD0iMTE1Ljg4MzQyNDk4MDM2MTM3IiB5PSI4LjQiPjEzJTwvdGV4dD4KPC9nPgo8ZyBzdHJva2U9IiM1NTUiIHN0cm9rZS13aWR0aD0iLjIiPjxwYXRoIGZpbGw9IiNGRkYiIGQ9Ik0yLjUgMTUuMjAwMDAwMDAwMDAwMDAxIGgzLjYgdjMuMSBIMi41IHoiLz48cGF0aCBmaWxsPSIjYTVjMmU2IiBkPSJNMyAxNS44IGgxdi43IEgzeiBtLjggMS4yaDF2LjdoLTF6IG0uOS0xLjFoLjh2LjZoLS44eiIvPjxwYXRoIGZpbGw9Im5vbmUiIGQ9Ik0zLjkgMTYuMiBoLjggbS0xLjMuMy40LjggbTEgLjEuNC0uOSIvPjwvZz48dGV4dCB4PSI3IiB5PSIxNi40Ij41MjwvdGV4dD4KPHRleHQgeD0iNyIgeT0iMTkuNCI+ZGlhZ3JhbXM8L3RleHQ+CjxnIGZvbnQtc2l6ZT0iMy4yIj4KPHJlY3QgZmlsbD0iI2ZmZGQ4NyIgc3Ryb2tlPSIjMzMzIiBzdHJva2Utd2lkdGg9IjAiIHg9IjI0LjIiIHk9IjEzLjQiIHdpZHRoPSIwLjAiIGhlaWdodD0iOCIgLz4KPHJlY3QgZmlsbD0iIzkxY2M4NCIgc3Ryb2tlPSIjMzMzIiBzdHJva2Utd2lkdGg9IjAiIHg9IjI0LjIiIHk9IjEzLjQiIHdpZHRoPSI2NC4wIiBoZWlnaHQ9IjgiIC8+Cjx0ZXh0IHg9IjI1LjIiIHk9IjE4LjQiPjYyJTwvdGV4dD4KPHJlY3QgZmlsbD0iI2E1YzJlNiIgc3Ryb2tlPSIjMzMzIiBzdHJva2Utd2lkdGg9IjAiIHg9Ijg4LjIiIHk9IjEzLjQiIHdpZHRoPSIzNC4wIiBoZWlnaHQ9IjgiIC8+Cjx0ZXh0IHg9Ijg5LjIiIHk9IjE4LjQiPjMzJTwvdGV4dD4KPHJlY3QgZmlsbD0iI2Y4OWY5ZiIgc3Ryb2tlPSIjMzMzIiBzdHJva2Utd2lkdGg9IjAiIHg9IjEyMi4yIiB5PSIxMy40IiB3aWR0aD0iNi4wIiBoZWlnaHQ9IjgiIC8+CjwvZz4KPGcgZm9udC1zaXplPSIyLjgiIGZpbGw9IiM1NTUiPgo8cmVjdCBmaWxsPSIjZmZkZDg3IiBzdHJva2U9IiMzMzMiIHN0cm9rZS13aWR0aD0iMCIgeD0iMyIgeT0iMjUiIHdpZHRoPSI1IiBoZWlnaHQ9IjMiIC8+Cjx0ZXh0IHg9IjkiIHk9IjI3LjYiPk9wZXJhdGlvbmFsIEFuYWx5c2lzPC90ZXh0Pgo8cmVjdCBmaWxsPSIjOTFjYzg0IiBzdHJva2U9IiMzMzMiIHN0cm9rZS13aWR0aD0iMCIgeD0iMzciIHk9IjI1IiB3aWR0aD0iNSIgaGVpZ2h0PSIzIiAvPgo8dGV4dCB4PSI0MyIgeT0iMjcuNiI+U3lzdGVtIEFuYWx5c2lzPC90ZXh0Pgo8cmVjdCBmaWxsPSIjYTVjMmU2IiBzdHJva2U9IiMzMzMiIHN0cm9rZS13aWR0aD0iMCIgeD0iNjciIHk9IjI1IiB3aWR0aD0iNSIgaGVpZ2h0PSIzIiAvPgo8dGV4dCB4PSI3MyIgeT0iMjcuNiI+TG9naWNhbCBBcmNoaXRlY3R1cmU8L3RleHQ+CjxyZWN0IGZpbGw9IiNmODlmOWYiIHN0cm9rZT0iIzMzMyIgc3Ryb2tlLXdpZHRoPSIwIiB4PSIxMDAiIHk9IjI1IiB3aWR0aD0iNSIgaGVpZ2h0PSIzIiAvPgo8dGV4dCB4PSIxMDYiIHk9IjI3LjYiPlBoeXNpY2FsIEFyY2hpdGVjdHVyZTwvdGV4dD4KPC9nPgo8L2c+Cjwvc3ZnPgo='; diff --git a/frontend/src/storybook/t4c.ts b/frontend/src/storybook/t4c.ts index 074142f40d..c934e86cc3 100644 --- a/frontend/src/storybook/t4c.ts +++ b/frontend/src/storybook/t4c.ts @@ -71,7 +71,7 @@ export class MockT4CInstanceWrapperService }; } - resetT4CInstance(): void {} + resetT4CInstance(): void {} // eslint-disable-line @typescript-eslint/no-empty-function } export class MockT4CRepositoryWrapperService @@ -87,7 +87,7 @@ export class MockT4CRepositoryWrapperService this._repositories.next(repositories); } - reset() {} + reset() {} // eslint-disable-line @typescript-eslint/no-empty-function asyncNameValidator(): AsyncValidatorFn { return (_control: AbstractControl): Observable => {