From 3758dd7a0aef1960d9c4cde0a8fca811d4a6aa0e Mon Sep 17 00:00:00 2001 From: backuppc Date: Thu, 30 Oct 2025 11:40:11 +0900 Subject: [PATCH] refactor: Move toolbar buttons to ToolStrip3 for design consistency MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Replaced Panel + Button controls with ToolStrip + ToolStripButton - Unified toolbar design with toolStrip2 style - Simplified WireToolbarButtonEvents() method - Updated UpdateImageEditButton() and DisableImageEditButton() for ToolStripButton - Image edit button now properly enables/disables based on selected node type 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- .../AGVMapEditor/Forms/MainForm.Designer.cs | 141 +++++++++++++++++- .../AGVLogic/AGVMapEditor/Forms/MainForm.cs | 112 ++------------ .../AGVLogic/AGVMapEditor/Forms/MainForm.resx | 90 +++++------ 3 files changed, 195 insertions(+), 148 deletions(-) diff --git a/Cs_HMI/AGVLogic/AGVMapEditor/Forms/MainForm.Designer.cs b/Cs_HMI/AGVLogic/AGVMapEditor/Forms/MainForm.Designer.cs index 6fe95f5..fcb1e83 100644 --- a/Cs_HMI/AGVLogic/AGVMapEditor/Forms/MainForm.Designer.cs +++ b/Cs_HMI/AGVLogic/AGVMapEditor/Forms/MainForm.Designer.cs @@ -41,6 +41,19 @@ namespace AGVMapEditor.Forms this.toolStrip1 = new System.Windows.Forms.ToolStrip(); this.btNodeRemove = new System.Windows.Forms.ToolStripButton(); this._propertyGrid = new System.Windows.Forms.PropertyGrid(); + this.toolStrip3 = new System.Windows.Forms.ToolStrip(); + this.btnSelect = new System.Windows.Forms.ToolStripButton(); + this.btnMove = new System.Windows.Forms.ToolStripButton(); + this.btnAddNode = new System.Windows.Forms.ToolStripButton(); + this.btnAddLabel = new System.Windows.Forms.ToolStripButton(); + this.btnAddImage = new System.Windows.Forms.ToolStripButton(); + this.btnEditImage = new System.Windows.Forms.ToolStripButton(); + this.btnConnect = new System.Windows.Forms.ToolStripButton(); + this.btnDelete = new System.Windows.Forms.ToolStripButton(); + this.btnDeleteConnection = new System.Windows.Forms.ToolStripButton(); + this.separator1 = new System.Windows.Forms.ToolStripSeparator(); + this.btnToggleGrid = new System.Windows.Forms.ToolStripButton(); + this.btnFitMap = new System.Windows.Forms.ToolStripButton(); this.toolStrip2 = new System.Windows.Forms.ToolStrip(); this.btnNew = new System.Windows.Forms.ToolStripButton(); this.btnOpen = new System.Windows.Forms.ToolStripButton(); @@ -52,11 +65,13 @@ namespace AGVMapEditor.Forms this.statusStrip1.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); this.splitContainer1.SuspendLayout(); this.tabControl1.SuspendLayout(); this.tabPageNodes.SuspendLayout(); this.tabPage1.SuspendLayout(); this.toolStrip1.SuspendLayout(); + this.toolStrip3.SuspendLayout(); this.toolStrip2.SuspendLayout(); this.SuspendLayout(); // @@ -87,6 +102,10 @@ namespace AGVMapEditor.Forms this.splitContainer1.Panel1.Controls.Add(this.tabControl1); this.splitContainer1.Panel1.Controls.Add(this._propertyGrid); this.splitContainer1.Panel1MinSize = 300; + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.Controls.Add(this.toolStrip3); this.splitContainer1.Size = new System.Drawing.Size(1200, 726); this.splitContainer1.SplitterDistance = 300; this.splitContainer1.TabIndex = 2; @@ -140,7 +159,7 @@ namespace AGVMapEditor.Forms this.tabPage1.Location = new System.Drawing.Point(4, 22); this.tabPage1.Name = "tabPage1"; this.tabPage1.Padding = new System.Windows.Forms.Padding(3); - this.tabPage1.Size = new System.Drawing.Size(292, 310); + this.tabPage1.Size = new System.Drawing.Size(292, 309); this.tabPage1.TabIndex = 1; this.tabPage1.Text = "연결 관리"; this.tabPage1.UseVisualStyleBackColor = true; @@ -152,7 +171,7 @@ namespace AGVMapEditor.Forms this.lstNodeConnection.ItemHeight = 12; this.lstNodeConnection.Location = new System.Drawing.Point(3, 3); this.lstNodeConnection.Name = "lstNodeConnection"; - this.lstNodeConnection.Size = new System.Drawing.Size(286, 279); + this.lstNodeConnection.Size = new System.Drawing.Size(286, 278); this.lstNodeConnection.TabIndex = 2; // // toolStrip1 @@ -161,7 +180,7 @@ namespace AGVMapEditor.Forms this.toolStrip1.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden; this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.btNodeRemove}); - this.toolStrip1.Location = new System.Drawing.Point(3, 282); + this.toolStrip1.Location = new System.Drawing.Point(3, 281); this.toolStrip1.Name = "toolStrip1"; this.toolStrip1.Size = new System.Drawing.Size(286, 25); this.toolStrip1.TabIndex = 3; @@ -175,14 +194,108 @@ namespace AGVMapEditor.Forms this.btNodeRemove.Size = new System.Drawing.Size(70, 22); this.btNodeRemove.Text = "Remove"; this.btNodeRemove.Click += new System.EventHandler(this.btNodeRemove_Click); - // + // // _propertyGrid - // + // this._propertyGrid.Dock = System.Windows.Forms.DockStyle.Bottom; this._propertyGrid.Location = new System.Drawing.Point(0, 335); this._propertyGrid.Name = "_propertyGrid"; this._propertyGrid.Size = new System.Drawing.Size(300, 391); this._propertyGrid.TabIndex = 6; + // + // toolStrip3 + // + this.toolStrip3.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.btnSelect, + this.btnMove, + this.btnAddNode, + this.btnAddLabel, + this.btnAddImage, + this.btnEditImage, + this.btnConnect, + this.btnDelete, + this.btnDeleteConnection, + this.separator1, + this.btnToggleGrid, + this.btnFitMap}); + this.toolStrip3.Location = new System.Drawing.Point(0, 0); + this.toolStrip3.Name = "toolStrip3"; + this.toolStrip3.Size = new System.Drawing.Size(896, 25); + this.toolStrip3.TabIndex = 0; + this.toolStrip3.Text = "toolStrip3"; + // + // btnSelect + // + this.btnSelect.Name = "btnSelect"; + this.btnSelect.Size = new System.Drawing.Size(58, 22); + this.btnSelect.Text = "선택 (S)"; + // + // btnMove + // + this.btnMove.Name = "btnMove"; + this.btnMove.Size = new System.Drawing.Size(58, 22); + this.btnMove.Text = "이동 (M)"; + // + // btnAddNode + // + this.btnAddNode.Name = "btnAddNode"; + this.btnAddNode.Size = new System.Drawing.Size(76, 22); + this.btnAddNode.Text = "노드 추가 (A)"; + // + // btnAddLabel + // + this.btnAddLabel.Name = "btnAddLabel"; + this.btnAddLabel.Size = new System.Drawing.Size(76, 22); + this.btnAddLabel.Text = "라벨 추가 (L)"; + // + // btnAddImage + // + this.btnAddImage.Name = "btnAddImage"; + this.btnAddImage.Size = new System.Drawing.Size(94, 22); + this.btnAddImage.Text = "이미지 추가 (I)"; + // + // btnEditImage + // + this.btnEditImage.Enabled = false; + this.btnEditImage.Name = "btnEditImage"; + this.btnEditImage.Size = new System.Drawing.Size(71, 22); + this.btnEditImage.Text = "이미지 편집"; + this.btnEditImage.Click += new System.EventHandler(this.BtnToolbarEditImage_Click); + // + // btnConnect + // + this.btnConnect.Name = "btnConnect"; + this.btnConnect.Size = new System.Drawing.Size(58, 22); + this.btnConnect.Text = "연결 (C)"; + // + // btnDelete + // + this.btnDelete.Name = "btnDelete"; + this.btnDelete.Size = new System.Drawing.Size(58, 22); + this.btnDelete.Text = "삭제 (D)"; + // + // btnDeleteConnection + // + this.btnDeleteConnection.Name = "btnDeleteConnection"; + this.btnDeleteConnection.Size = new System.Drawing.Size(82, 22); + this.btnDeleteConnection.Text = "연결삭제 (X)"; + // + // separator1 + // + this.separator1.Name = "separator1"; + this.separator1.Size = new System.Drawing.Size(6, 25); + // + // btnToggleGrid + // + this.btnToggleGrid.Name = "btnToggleGrid"; + this.btnToggleGrid.Size = new System.Drawing.Size(47, 22); + this.btnToggleGrid.Text = "그리드"; + // + // btnFitMap + // + this.btnFitMap.Name = "btnFitMap"; + this.btnFitMap.Size = new System.Drawing.Size(59, 22); + this.btnFitMap.Text = "맵 맞춤"; // // toolStrip2 // @@ -258,7 +371,7 @@ namespace AGVMapEditor.Forms this.btnSaveAs.Text = "다른이름으로저장"; this.btnSaveAs.ToolTipText = "다른 이름으로 저장"; this.btnSaveAs.Click += new System.EventHandler(this.btnSaveAs_Click); - // + // // MainForm // this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F); @@ -275,6 +388,7 @@ namespace AGVMapEditor.Forms this.statusStrip1.ResumeLayout(false); this.statusStrip1.PerformLayout(); this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel2.ResumeLayout(false); ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); this.splitContainer1.ResumeLayout(false); this.tabControl1.ResumeLayout(false); @@ -284,6 +398,8 @@ namespace AGVMapEditor.Forms this.tabPage1.PerformLayout(); this.toolStrip1.ResumeLayout(false); this.toolStrip1.PerformLayout(); + this.toolStrip3.ResumeLayout(false); + this.toolStrip3.PerformLayout(); this.toolStrip2.ResumeLayout(false); this.toolStrip2.PerformLayout(); this.ResumeLayout(false); @@ -313,5 +429,18 @@ namespace AGVMapEditor.Forms private System.Windows.Forms.ToolStripSeparator toolStripSeparator3; private System.Windows.Forms.ToolStripButton btnSave; private System.Windows.Forms.ToolStripButton btnSaveAs; + private System.Windows.Forms.ToolStrip toolStrip3; + private System.Windows.Forms.ToolStripButton btnSelect; + private System.Windows.Forms.ToolStripButton btnMove; + private System.Windows.Forms.ToolStripButton btnAddNode; + private System.Windows.Forms.ToolStripButton btnAddLabel; + private System.Windows.Forms.ToolStripButton btnAddImage; + private System.Windows.Forms.ToolStripButton btnEditImage; + private System.Windows.Forms.ToolStripButton btnConnect; + private System.Windows.Forms.ToolStripButton btnDelete; + private System.Windows.Forms.ToolStripButton btnDeleteConnection; + private System.Windows.Forms.ToolStripSeparator separator1; + private System.Windows.Forms.ToolStripButton btnToggleGrid; + private System.Windows.Forms.ToolStripButton btnFitMap; } } \ No newline at end of file diff --git a/Cs_HMI/AGVLogic/AGVMapEditor/Forms/MainForm.cs b/Cs_HMI/AGVLogic/AGVMapEditor/Forms/MainForm.cs index fa8614a..00def91 100644 --- a/Cs_HMI/AGVLogic/AGVMapEditor/Forms/MainForm.cs +++ b/Cs_HMI/AGVLogic/AGVMapEditor/Forms/MainForm.cs @@ -119,113 +119,32 @@ namespace AGVMapEditor.Forms // 스플리터 패널에 맵 캔버스 추가 splitContainer1.Panel2.Controls.Add(_mapCanvas); - // 편집 모드 툴바 초기화 - InitializeEditModeToolbar(); + // 툴바 버튼 이벤트 연결 + WireToolbarButtonEvents(); } - private void InitializeEditModeToolbar() + /// + /// 툴바 버튼 이벤트 핸들러 연결 + /// + private void WireToolbarButtonEvents() { - // 툴바 패널 생성 - var toolbarPanel = new Panel(); - toolbarPanel.Height = 35; - toolbarPanel.Dock = DockStyle.Top; - toolbarPanel.BackColor = SystemColors.Control; - - // 선택 모드 버튼 - var btnSelect = new Button(); - btnSelect.Text = "선택 (S)"; - btnSelect.Size = new Size(70, 28); - btnSelect.Location = new Point(5, 3); + // 편집 모드 버튼들 btnSelect.Click += (s, e) => _mapCanvas.CurrentEditMode = UnifiedAGVCanvas.EditMode.Select; - - // 이동 모드 버튼 - var btnMove = new Button(); - btnMove.Text = "이동 (M)"; - btnMove.Size = new Size(70, 28); - btnMove.Location = new Point(80, 3); btnMove.Click += (s, e) => _mapCanvas.CurrentEditMode = UnifiedAGVCanvas.EditMode.Move; - - // 노드 추가 버튼 - var btnAddNode = new Button(); - btnAddNode.Text = "노드 추가 (A)"; - btnAddNode.Size = new Size(80, 28); - btnAddNode.Location = new Point(155, 3); btnAddNode.Click += (s, e) => _mapCanvas.CurrentEditMode = UnifiedAGVCanvas.EditMode.AddNode; - - // 라벨 추가 버튼 - var btnAddLabel = new Button(); - btnAddLabel.Text = "라벨 추가 (L)"; - btnAddLabel.Size = new Size(80, 28); - btnAddLabel.Location = new Point(240, 3); btnAddLabel.Click += (s, e) => _mapCanvas.CurrentEditMode = UnifiedAGVCanvas.EditMode.AddLabel; - - // 이미지 추가 버튼 - var btnAddImage = new Button(); - btnAddImage.Text = "이미지 추가 (I)"; - btnAddImage.Size = new Size(90, 28); - btnAddImage.Location = new Point(325, 3); btnAddImage.Click += (s, e) => _mapCanvas.CurrentEditMode = UnifiedAGVCanvas.EditMode.AddImage; - - // 이미지 편집 버튼 - var btnEditImage = new Button(); - btnEditImage.Name = "btnToolbarEditImage"; - btnEditImage.Text = "이미지 편집"; - btnEditImage.Size = new Size(80, 28); - btnEditImage.Location = new Point(420, 3); - btnEditImage.Enabled = false; // 처음에는 비활성화 - btnEditImage.Click += BtnToolbarEditImage_Click; - - // 연결 모드 버튼 - var btnConnect = new Button(); - btnConnect.Text = "연결 (C)"; - btnConnect.Size = new Size(70, 28); - btnConnect.Location = new Point(505, 3); btnConnect.Click += (s, e) => _mapCanvas.CurrentEditMode = UnifiedAGVCanvas.EditMode.Connect; - - // 삭제 모드 버튼 - var btnDelete = new Button(); - btnDelete.Text = "삭제 (D)"; - btnDelete.Size = new Size(70, 28); - btnDelete.Location = new Point(580, 3); btnDelete.Click += (s, e) => _mapCanvas.CurrentEditMode = UnifiedAGVCanvas.EditMode.Delete; - - // 연결 삭제 버튼 - var btnDeleteConnection = new Button(); - btnDeleteConnection.Text = "연결삭제 (X)"; - btnDeleteConnection.Size = new Size(80, 28); - btnDeleteConnection.Location = new Point(655, 3); btnDeleteConnection.Click += (s, e) => _mapCanvas.CurrentEditMode = UnifiedAGVCanvas.EditMode.DeleteConnection; - // 구분선 - var separator1 = new Label(); - separator1.Text = "|"; - separator1.Size = new Size(10, 28); - separator1.Location = new Point(740, 3); - separator1.TextAlign = ContentAlignment.MiddleCenter; - // 그리드 토글 버튼 - var btnToggleGrid = new Button(); - btnToggleGrid.Text = "그리드"; - btnToggleGrid.Size = new Size(60, 28); - btnToggleGrid.Location = new Point(755, 3); btnToggleGrid.Click += (s, e) => _mapCanvas.ShowGrid = !_mapCanvas.ShowGrid; // 맵 맞춤 버튼 - var btnFitMap = new Button(); - btnFitMap.Text = "맵 맞춤"; - btnFitMap.Size = new Size(70, 28); - btnFitMap.Location = new Point(820, 3); btnFitMap.Click += (s, e) => _mapCanvas.FitToNodes(); - // 툴바에 버튼들 추가 - toolbarPanel.Controls.AddRange(new Control[] - { - btnSelect, btnMove, btnAddNode, btnAddLabel, btnAddImage, btnEditImage, btnConnect, btnDelete, btnDeleteConnection, separator1, btnToggleGrid, btnFitMap - }); - - // 스플리터 패널에 툴바 추가 (맨 위에) - splitContainer1.Panel2.Controls.Add(toolbarPanel); - toolbarPanel.BringToFront(); + // 이미지 편집 버튼은 이미 Designer.cs에서 연결됨 (BtnToolbarEditImage_Click) } #endregion @@ -260,6 +179,7 @@ namespace AGVMapEditor.Forms { _selectedNode = node; UpdateNodeProperties(); + UpdateImageEditButton(); // 이미지 노드 선택 시 이미지 편집 버튼 활성화 } private void OnNodeMoved(object sender, MapNode node) @@ -972,11 +892,8 @@ namespace AGVMapEditor.Forms /// private void UpdateImageEditButton() { - var btn = this.Controls.Find("btnToolbarEditImage", true).FirstOrDefault() as Button; - if (btn != null) - { - btn.Enabled = (_selectedNode != null && _selectedNode.Type == NodeType.Image); - } + // ToolStripButton으로 변경됨 + btnEditImage.Enabled = (_selectedNode != null && _selectedNode.Type == NodeType.Image); } /// @@ -984,11 +901,8 @@ namespace AGVMapEditor.Forms /// private void DisableImageEditButton() { - var btn = this.Controls.Find("btnToolbarEditImage", true).FirstOrDefault() as Button; - if (btn != null) - { - btn.Enabled = false; - } + // ToolStripButton으로 변경됨 + btnEditImage.Enabled = false; } /// diff --git a/Cs_HMI/AGVLogic/AGVMapEditor/Forms/MainForm.resx b/Cs_HMI/AGVLogic/AGVMapEditor/Forms/MainForm.resx index 0500881..41da810 100644 --- a/Cs_HMI/AGVLogic/AGVMapEditor/Forms/MainForm.resx +++ b/Cs_HMI/AGVLogic/AGVMapEditor/Forms/MainForm.resx @@ -120,6 +120,9 @@ 132, 17 + + 462, 17 + 249, 17 @@ -130,16 +133,16 @@ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG - YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9 - 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw - bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc - VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9 - c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32 - Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo - mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+ - kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D - TgDQASA1MVpwzwAAAABJRU5ErkJggg== + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIFSURBVDhPpZLtS1NhGMbPPxJmmlYSgqHiKzGU1EDxg4iK + YKyG2WBogqMYJQOtCEVRFBGdTBCJfRnkS4VaaWNT5sqx1BUxRXxDHYxAJLvkusEeBaPAB+5z4Jzn+t3X + /aLhnEfjo8m+dCoa+7/C3O2Hqe0zDC+8KG+cRZHZhdzaaWTVTCLDMIY0vfM04Nfh77/G/sEhwpEDbO3t + I7TxE8urEVy99fT/AL5gWDLrTB/hnF4XsW0khCu5ln8DmJliT2AXrcNBsU1gj/MH4nMeKwBrPktM28xM + cX79DFKrHHD5d9D26hvicx4pABt2lpg10zYzU0zr7+e3xXGcrkEB2O2TNec9nJFwB3alZn5jZorfeDZh + 6Q3g8s06BeCoKF4MRURoH1+BY2oNCbeb0TIclIYxOhzf8frTOuo7FxCbbVIAzpni0iceEc8vhzEwGkJD + lx83ymxifejdKjRNk/8PWnyIyTQqAJek0jqHwfEVscu31baIu8+90sTE4nY025dQ2/5FIPpnXlzKuK8A + HBUzHot52djqQ6HZhfR7IwK4mKpHtvEDMqvfCiQ6zaAAXM8x94aIWTNrLLG4kVUzgaTSPlzLtyJOZxbb + 1wtfyg4Q+AfA3aZlButjSfxGcUJBk4g5tuP3haQKRKXcUQDOmbvNTpPOJeFFjordZmbWTNvMTHFUcpUC + nOccAdABIDXXE1nzAAAAAElFTkSuQmCC @@ -160,16 +163,16 @@ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29m - dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAILSURBVDhPpY9LaxNRGIa7cO/On+CqFdFmRHQpiCs3 - ohtvIAW1WUiUQkXQLnoBIVAaRUQshVLBFotGBJfWRTW17dhEM5mkteklNMFm7pecubx+mWomQhBLYZ75 - zjnwPu85bQD2RMvD3dDycDcEv9zbTr44c5mtfbzaxBWWf3dyWXjTfoDY/xfJgH0NgZjkbN/3aOnTV2dn - 7VgVbMx219Znu+0/lOZ7rc3UnWLu9ZHzoWA6IvuuBXsjDmNlGMbqKMziFHxHIpcO39UIZWfvVAGP1cRp - LhMKXnKqxxQKJ6AXRqB+68N26iYqc1FI6X5ISw8g8XdRXewhYnSzMsRXnVoomIwwx9yClEmgujCE8ofb - MMufqVX93V6fcngDep44yVmhYOIYC97v2YQJuEYQdE0BdikBa70f5o8eGPnr0IWLcPUsxPFIk2CMq/mu - CVf9BEd6D/ZzCrWtZxR8CHP1HsxCFEbuEvTvZ6GlT8HVeIijzYKnnO0xFWw7iVp5nFofwVqj1pV6axf0 - 7AVomTNQv56AsnAYjvoF4pNmQSJi+Uyi8BjszWFYxT4Kx2CI1yh8jlpPQ+WPQ5k/BHnuIAlSqGcaglz8 - aInJBVlffuHp+efQxMfQhDi07ADUzH2o6V4oSzEofBTK4g3YlRmfMnJDIAy03xKGOiaEwY4KTeufDAZT - ocxIQ7AXWh7+P2j7BY3RGzIVTOkAAAAAAElFTkSuQmCC + dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIWSURBVDhPpY/PaxNBGIZ78O7NP8FTKmKbFdGjIJ68 + iF78BSKozUGiFCqC9pA0IARKo4iIpVAq2GKxEcGj9VBNbRObaDabNDZNG5pgs7uzu7O7s7vzSlJNIgEh + 9PDM980L3/PN9AHo2w9dQa90Bb3SPHLvBlOlxSts89O1Dq6y/PtT6+KC75C44Dv4D/EmB1oCKS5YnHsA + OMAb7PWOWcPW0pBdXhqy/lJZGTG3E/dKubfHLrQF836FuyasrSiM4jiMjUnQ0hy4I4N7Orirgbvq3t2p + Ax6zpXkh0xa8FojHVBjFGPTCBMj3UewmbqO2HICcDkFeewQ5dR/15DDqySAcswrpzaDWFsz6mUN3IGdi + qK9GUP14F7T6Bdwlf7Y3qtJ+ATikWcFsC2aOs+b/PQvwKOAazUGXirAqMZjlEOjPYRj5m9DFS3D1LKRp + f4dgSrC5S+GSz3DkD2C/5mDvvIBZfgy68QC0EICRuwz9xzlo6dNwtRSkyU7Bc8HyGAHbjcOuTsOqPIG5 + GQItNrbegJ69CC1zFuTbSairR+GQr5CedQpifpMzGXZ1Ctb2OMzSKGgxCEO6Dj17Hlr6DEjqBNSVI1CW + D8MhCTRmWoJcdKDClIKir7/y9PxLaNJTaGIUWjYMknkIkh6BuhaEmgpATd6CVVvkueiA0hKIYd8dMdI/ + I47118RIv/lfxppVFcO+iZZgP3QFvfIbjdEbMqg0Vh4AAAAASUVORK5CYII= @@ -185,15 +188,15 @@ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29m - dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHlSURBVDhPpZJbSxtBGIb3VhQULVoqUunRtEpCEmmM - 0UJi2ZiE1qYHg1ZKbUsP/9MLD+DfKGZDScJmd7M783RmY9LdpjelFy/DDPO837zfNwbwXxo/NAwrPL6W - iMv6835so7ZNHj+Ab+/g6yHyywHycwP58S3yw2uCh3fwDaMTZcbh70dglpDZLDKdRqRSiLU1gkKO4OgF - /fu3cfTdmEEUPmzA5SWyXkckk4jVVYJqFXlxgV8r4+/v4t1dwr42GRoMnqwqa5huF1otglqNoFIBS0Xv - dJBnZ/STj+i/LNIN0YhBmDeTQezthfDQJJSGlUl/ext3YQHv+VPaUQPdYflp/3de9eQhGErB3tYW7vw8 - ztwcbrXwF4PjN4O8iQRBuRwz0NW9fB5ndpbe9DRuOTduIN7XCVZWCExzlFmvGqbdRl5d4ajJ2JOTuM/W - +Rk1ULNFqBH5T9LI8/NB1WYTb3MTd2MjhKUyEScn9JZu4pQycQNP/TA9X79RwTeLiNPTENZ5ezMzOLq5 - CnbWUzg7WTqLN2gZxo+RgZb6HJaeb//VDl7i3iivPTWFPTGBvagaqCq3I3DMQEt9DstevoVXK+Du5nHN - XJjXKWVxiukxWCtmoKW6a+kOD6WzailQS40mfj+2+Xdh/ALnlbiDsb03NQAAAABJRU5ErkJggg== + dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHbSURBVDhPpZFbSxtBGIbnVhQULbFUpKVH0yqRZKUx + RguJZWMSqk0PBm0oPdHD/8yFB/BvFDOhbMJmd7O785TZmJiDN6UXLwvDPM+373wCEP+TiQOEkNHxVcLR + yPH743CDZ4/h5wf4cYz6foT6VkV9eY/69JbgyX18IVo3C/rwrxqYeZRhoJJJwvV1wrU1gmyaoLZP99Fd + HH13RDAMH1fh4gJVqRAmEoSrqwSlEur8HL9cwD/cw3uwjH0l6Qt6v2zmI5h2G5pNgnKZoFgEKaHVQp2e + 0k08pfs6RztChwRR31SK8OAggvuSKBqWku7ODu7iIt6rF1jDAv3C6uvhdd9SaQBGkRJvexs3FsNZWMAt + ZW8QfH7X6xuPExQKIwI93ctkcObn6czO4hbSk4LwY4VgZYXANAed9VfDWBbq8hLHMLCnp3FfbvBnWOBr + QW0f/3kSdXbWm9po4G1t4W5uRrCyLMJ6nc7ybZx8alTgCSH1fv1qEd/MEZ6cRLDu25mbw9GPW6/jbKzj + 7Bq0lm7RFOL39RZAOEJIvd/um128+MNBX3tmBntqCnspFk22huARgY4thLTv3cErZ3H3MrhmOurr5A2c + XHICnhDoWEJI/cL96K46zV6a4/cnBP+av+eVuIOQwaWDAAAAAElFTkSuQmCC @@ -209,20 +212,21 @@ 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 + VycUwQAAAABJRU5ErkJggg== \ No newline at end of file